JS实现数组去重及数组内对象去重功能示例


Posted in Javascript onFebruary 02, 2019

本文实例讲述了JS实现数组去重及数组内对象去重功能。分享给大家供大家参考,具体如下:

大家在写项目的时候一定遇到过这种逻辑需求,就是给一个数组进行去重处理,还有一种就是给数组内的对象根据某一个属性,比如id,进行去重,下面我写了两个函数,都是可以达到这个效果的,一个是纯ES5的去重办法,一个是用了ES6的 Array.from(new Set())和ES5的reduce来进行去重

我先定义两个数组吧

var arr = [1,2,3,5,3,4,5,6,6,"test","test",true];
var person = [
  {
    name:"孙悟空",
    weapon:"如意金箍棒",
    experience:"大闹天宫、西天取经",
    post:"斗战胜佛、齐天大圣"
  },
  {
    name:"孙悟空",
    weapon:"如意金箍棒",
    experience:"大闹天宫、西天取经",
    post:"斗战胜佛、齐天大圣"
  },
  {
    name:"孙悟空",
    weapon:"如意金箍棒",
    experience:"大闹天宫、西天取经",
    post:"斗战胜佛、齐天大圣"
  },
  {
    name:"孙悟空",
    weapon:"如意金箍棒",
    experience:"大闹天宫、西天取经",
    post:"斗战胜佛、齐天大圣"
  },
  {
    name:"孙悟空",
    weapon:"如意金箍棒",
    experience:"大闹天宫、西天取经",
    post:"斗战胜佛、齐天大圣"
  }
];

ES5版本:

//ES5原生去重办法
function Es5duplicate(arr,type){
  var newArr = [];
  var tArr = [];
  if(arr.length == 0){
    return arr;
  }else{
    if(type){
      for(var i = 0; i < arr.length;i++){
        if(!tArr[arr[i][type]]){
          newArr.push(arr[i]);
          tArr[arr[i][type]] = true;
        }
      }
      return newArr;
    }else{
      for(var i = 0; i < arr.length;i++){
        if(!tArr[arr[i]]){
          newArr.push(arr[i]);
          tArr[arr[i]] = true;
        }
      }
      return newArr;
    }
  }
}
console.log('ES5去重',Es5duplicate(arr));
console.log('ES5去重',Es5duplicate(person,"name"));

ES6 + ES5版本:

//Es6 + ES5去重办法
function Es6duplicate(arr,type){
  if(arr.length == 0){
    return arr;
  }else{
    if(type){
      var obj = {}
      var newArr = arr.reduce((cur,next) => {
        obj[next.name] ? "" : obj[next.name] = true && cur.push(next);
        return cur;
      },[])
      return newArr;
    }else{
      return Array.from(new Set(arr));
    }
  }
}
console.log('ES6去重',Es6duplicate(arr));
console.log('ES6去重',Es6duplicate(person,"name"));

看下结果

JS实现数组去重及数组内对象去重功能示例

看起来好像是第二种办法代码量要小一些,但是第一个通用,兼容性特别好,第二个因为牵扯到了ES6新特性,所以还是要考虑一下兼容性,但是如果你要是在vue-cli初始化生成的项目,可以随便用ES6的新特性,他自动转译了,我自己搭建了一个demo,试了好多新特性,IE9+都有效果(本身vue就不支持IE8及以下,所以IE9以下没办法实验)

Javascript 相关文章推荐
javascript 关于# 和 void的区别分析
Oct 26 Javascript
js操作iframe的一些方法介绍
Jun 25 Javascript
如何将php数组或者对象传递给javascript
Mar 20 Javascript
完美兼容各大浏览器的jQuery插件实现图片切换特效
Dec 12 Javascript
原生js图片轮播效果实现代码
Oct 19 Javascript
ajax与json 获取数据并在前台使用简单实例
Jan 19 Javascript
create-react-app修改为多页面支持的方法
May 17 Javascript
JS 音频可视化插件Wavesurfer.js的使用教程
Oct 31 Javascript
JQuery属性操作与循环用法示例
May 15 jQuery
小程序实现搜索框功能
Mar 26 Javascript
vue 实现微信浮标效果
Sep 01 Javascript
原生小程序封装跑马灯效果
Oct 21 Javascript
JS实现的Object数组去重功能示例【数组成员为Object对象】
Feb 01 #Javascript
JavaScript动态创建二维数组的方法示例
Feb 01 #Javascript
Electron 如何调用本地模块的方法
Feb 01 #Javascript
详解使用webpack+electron+reactJs开发windows桌面应用
Feb 01 #Javascript
原来JS还可以这样拆箱转换详解
Feb 01 #Javascript
微信小程序拍照和摄像功能实现方法示例
Feb 01 #Javascript
微信小程序常用简易小函数总结
Feb 01 #Javascript
You might like
PHP新手上路(八)
2006/10/09 PHP
php selectradio和checkbox默认选择的实现方法详解
2013/06/29 PHP
php获取、检查类名、函数名、方法名的函数方法
2015/06/25 PHP
JavaScript CSS修改学习第六章 拖拽
2010/02/19 Javascript
jQuery中RadioButtonList的功能及用法实例介绍
2013/08/23 Javascript
[原创]推荐10款最热门jQuery UI框架
2014/08/19 Javascript
javascript运动框架用法实例分析(实现放大与缩小效果)
2016/01/08 Javascript
基于jQuery的网页影音播放器jPlayer的基本使用教程
2016/03/08 Javascript
HTML5 canvas 9绘制图片实例详解
2016/09/06 Javascript
详解Angular的数据显示优化处理
2016/12/26 Javascript
Angular开发者指南之入门介绍
2017/03/05 Javascript
Bootstrap 设置datetimepicker在屏幕上面弹出设置方法
2017/03/21 Javascript
vue在使用ECharts时的异步更新和数据加载详解
2017/11/22 Javascript
JS简单实现查看文档创建日期、修改日期和文档大小的方法示例
2018/04/08 Javascript
vue 录制视频并压缩视频文件的方法
2018/07/27 Javascript
基于Nodejs的Tcp封包和解包的理解
2018/09/19 NodeJs
详解搭建es6+devServer简单开发环境
2018/09/25 Javascript
微信小程序实现保存图片到相册功能
2018/11/30 Javascript
Javascript数组方法reduce的妙用之处分享
2019/06/10 Javascript
JavaScript通如何过RGraph实现动态仪表盘
2020/10/15 Javascript
[38:21]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS LGD-CDEC
2014/05/22 DOTA
[40:06]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第一场
2018/04/04 DOTA
python实现搜索本地文件信息写入文件的方法
2016/02/22 Python
Python与人工神经网络:使用神经网络识别手写图像介绍
2017/12/19 Python
轻松实现TensorFlow微信跳一跳的AI
2018/01/05 Python
Python寻找两个有序数组的中位数实例详解
2018/12/05 Python
Python字典遍历操作实例小结
2019/03/05 Python
Python Django的安装配置教程图文详解
2019/07/17 Python
Python Numpy数组扩展repeat和tile使用实例解析
2019/12/09 Python
python 实现屏幕录制示例
2019/12/23 Python
pyinstaller还原python代码过程图解
2020/01/08 Python
Python unittest基本使用方法代码实例
2020/06/29 Python
关于django python manage.py startapp 应用名出错异常原因解析
2020/12/15 Python
公司试用期员工自我评价
2014/09/17 职场文书
校园新闻稿范文
2015/07/18 职场文书
安全主题班会教案
2015/08/12 职场文书