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 相关文章推荐
js中更短的 Array 类型转换
Oct 30 Javascript
jquery跨域请求示例分享(jquery发送ajax请求)
Mar 25 Javascript
jQuery实现鼠标可拖动调整表格列宽度
May 26 Javascript
JavaScript中constructor()方法的使用简介
Jun 05 Javascript
jquery实现的动态回到顶部特效代码
Oct 28 Javascript
javascript的几种继承方法介绍
Mar 22 Javascript
JavaScript 2048 游戏实例代码(简单易懂)
Mar 25 Javascript
jquery实现表格中点击相应行变色功能效果【实例代码】
May 09 Javascript
vue 将页面公用的头部组件化的方法
Dec 18 Javascript
js动态引入的四种方法
May 05 Javascript
webpack 最佳配置指北(推荐)
Jan 07 Javascript
vue+element ui实现锚点定位
Jun 29 Vue.js
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
全国FM电台频率大全 - 19 广东省
2020/03/11 无线电
德生PL330的评价与改造
2021/03/02 无线电
PHP 数组实例说明
2008/08/18 PHP
PHP array操作10个小技巧分享
2011/06/23 PHP
PHP循环语句笔记(foreach,list)
2011/11/29 PHP
ThinkPHP中url隐藏入口文件后接收alipay传值的方法
2014/12/09 PHP
PHP7数组的底层实现示例
2019/08/25 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
2019/10/16 PHP
WordPress JQuery处理沙发头像
2009/06/22 Javascript
Javascript+XMLHttpRequest+asp.net无刷新读取数据库数据
2009/08/09 Javascript
纯JavaScript实现的完美渐变弹出层效果代码
2010/04/02 Javascript
javascript attachEvent绑定多个事件执行顺序问题
2010/10/20 Javascript
引入JS文件IE6报语法错误或缺少对象问题的解决方法
2014/01/09 Javascript
jQuery基于ajax实现星星评论代码
2015/08/07 Javascript
jquery实现删除一个元素后面的所有元素功能
2015/12/21 Javascript
Bootstrap学习笔记之css组件(3)
2016/06/07 Javascript
AngularJS 面试题集锦
2016/09/06 Javascript
Three.js利用性能插件stats实现性能监听的方法
2017/09/25 Javascript
Angular2实现组件交互的方法分析
2017/12/19 Javascript
关于JavaScript 数组你应该知道的事情(推荐)
2019/04/10 Javascript
小程序中this.setData的使用和注意事项
2019/08/28 Javascript
原生JavaScript创建不可变对象的方法简单示例
2020/05/07 Javascript
[42:32]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
Python爬取读者并制作成PDF
2015/03/10 Python
python中range()与xrange()用法分析
2016/09/21 Python
Python中生成器和迭代器的区别详解
2018/02/10 Python
对Python多线程读写文件加锁的实例详解
2019/01/14 Python
Kears+Opencv实现简单人脸识别
2019/08/28 Python
CSS3字体效果的设置方法小结
2016/06/13 HTML / CSS
HTML5文档结构标签
2017/04/21 HTML / CSS
大学生优秀的自我评价分享
2013/10/22 职场文书
2014年物业管理工作总结
2014/11/21 职场文书
学校元旦晚会开场白
2014/12/14 职场文书
事业单位个人总结
2015/02/12 职场文书
健康教育主题班会
2015/08/14 职场文书
《月歌。》宣布制作10周年纪念剧场版《RABBITS KINGDOM THE MOVIE》
2022/04/02 日漫