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 相关文章推荐
JQuery 前台切换网站的样式实现
Jun 22 Javascript
jQuery性能优化28条建议你值得借鉴
Feb 16 Javascript
jquery 定位input元素的几种方法小结
Jul 28 Javascript
简单的js表单验证函数
Oct 28 Javascript
分享十五款 jQuery 社交网络分享插件
May 16 Javascript
jquery仿QQ登录账号选择下拉框效果
Mar 22 Javascript
详解Angular中$cacheFactory缓存的使用
Aug 19 Javascript
JavaScript利用正则表达式替换字符串中的内容
Dec 12 Javascript
jquery之基本选择器practice(实例讲解)
Sep 30 jQuery
微信小程序swiper左右扩展各显示一半代码实例
Dec 05 Javascript
JavaScript单线程和任务队列原理解析
Feb 04 Javascript
Vue 根据条件判断van-tab的显示方式
Aug 03 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里面的抽象类
2010/01/28 PHP
PHP多文件上传类实例
2015/03/07 PHP
Laravel 5框架学习之数据库迁移(Migrations)
2015/04/08 PHP
求帮忙修改个php curl模拟post请求内容后并下载文件的解决思路
2015/09/20 PHP
PHP设计模式之迭代器模式Iterator实例分析【对象行为型】
2020/04/26 PHP
初窥JQuery(二) 事件机制(1)
2010/11/25 Javascript
判断输入是否为空,获得输入类型的JS代码
2013/10/30 Javascript
动态添加option及createElement使用示例
2014/01/26 Javascript
Nodejs实现文件上传的示例代码
2017/09/26 NodeJs
javascript将json格式数组下载为excel表格的方法
2017/12/22 Javascript
浅谈Vue.js之初始化el以及数据的绑定说明
2019/11/14 Javascript
JavaScript实现京东放大镜效果
2019/12/03 Javascript
Openlayers实现点闪烁扩散效果
2020/09/24 Javascript
Python中return语句用法实例分析
2015/08/04 Python
Python Pandas数据结构简单介绍
2019/07/03 Python
Python实现PyPDF2处理PDF文件的方法示例
2019/09/25 Python
python中常见错误及解决方法
2020/06/21 Python
python爬虫使用正则爬取网站的实现
2020/08/03 Python
Python 列表推导式需要注意的地方
2020/10/23 Python
利用HTML5绘制点线面组成的3D图形的示例
2015/05/12 HTML / CSS
canvas中普通动效与粒子动效的实现代码示例
2019/01/03 HTML / CSS
美国珠宝网上商店:Jeulia
2016/09/01 全球购物
Linux Interview Questions For software testers
2012/06/02 面试题
医学生实习自我鉴定
2013/09/27 职场文书
大学生的四年学习自我评价
2013/12/13 职场文书
中文专业学生自我评价范文
2014/02/06 职场文书
村长贪污检举信
2014/04/04 职场文书
小学一年级学生评语
2014/04/22 职场文书
尊师重教演讲稿
2014/09/04 职场文书
2015年社区统计工作总结
2015/04/21 职场文书
会计工作自我鉴定范文
2019/06/21 职场文书
C#连接ORACLE出现乱码问题的解决方法
2021/10/05 Oracle
Python语言中的数据类型-序列
2022/02/24 Python
Spring JPA 增加字段执行异常问题及解决
2022/06/10 Java/Android
nginx配置指令之server_name的具体使用
2022/08/14 Servers