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 当前日期转化为中文的实现代码
May 13 Javascript
javascript:void(0)是什么意思示例介绍
Nov 17 Javascript
深入探寻javascript定时器
Jan 02 Javascript
JavaScript中标识符提升问题
Jun 11 Javascript
js字符串与Unicode编码互相转换
May 17 Javascript
react系列从零开始_简单谈谈react
Jul 06 Javascript
Vue.js实现实例搜索应用功能详细代码
Aug 24 Javascript
vue keep-alive请求数据的方法示例
May 16 Javascript
vue+element的表格实现批量删除功能示例代码
Aug 17 Javascript
JS实现的tab页切换效果完整示例
Dec 18 Javascript
Vue $attrs &amp; inheritAttr实现button禁用效果案例
Dec 07 Vue.js
jQuery ajax - getScript() 方法和getJSON方法
May 14 jQuery
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之uniqid()函数用法
2014/11/03 PHP
用JS写的一个TableView控件代码
2010/01/23 Javascript
避免 showModalDialog 弹出新窗体的原因分析
2010/05/31 Javascript
JS 无限级 Select效果实现代码(json格式)
2011/08/30 Javascript
JS原型对象通俗&quot;唱法&quot;
2012/12/27 Javascript
JQuery与Ajax调用新浪API获取短网址的代码
2014/02/07 Javascript
JavaScript对象的property属性详解
2014/04/01 Javascript
使用AngularJS中的SCE来防止XSS攻击的方法
2015/06/18 Javascript
辨析JavaScript中的Undefined类型与null类型
2016/05/26 Javascript
javascript汉字拼音互转的简单实例
2016/10/09 Javascript
Bootstrap风格的WPF样式
2016/12/07 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图的组合双轴图效果示例【附demo源码下载】
2017/03/09 Javascript
微信小程序利用co处理异步流程的方法教程
2017/05/20 Javascript
js移动端事件基础及常用事件库详解
2017/08/15 Javascript
vue+vuex+axios+echarts画一个动态更新的中国地图的方法
2017/12/19 Javascript
js tab栏切换代码实例解析
2019/09/03 Javascript
Python功能键的读取方法
2015/05/28 Python
Android模拟器无法启动,报错:Cannot set up guest memory ‘android_arm’ Invalid argument的解决方法
2016/07/01 Python
使用Python制作微信跳一跳辅助
2018/01/31 Python
对Python3中的input函数详解
2018/04/22 Python
Django代码性能优化与Pycharm Profile使用详解
2018/08/26 Python
PyCharm设置护眼背景色的方法
2018/10/29 Python
Python 面试中 8 个必考问题
2018/11/16 Python
Python 获取中文字拼音首个字母的方法
2018/11/28 Python
对PyQt5中树结构的实现方法详解
2019/06/17 Python
python 计算两个列表的相关系数的实现
2019/08/29 Python
Python读取JSON数据操作实例解析
2020/05/18 Python
BookOutlet加拿大:在网上书店购买廉价折扣图书和小说
2018/10/05 全球购物
英国花园、DIY、电器和家居用品商店:Robert Dyas
2019/03/18 全球购物
美国健康和保健平台:healtop
2020/07/02 全球购物
大学新生军训个人的自我评价
2013/10/03 职场文书
公司前台接待岗位职责
2013/12/03 职场文书
大一自我鉴定范文
2013/12/27 职场文书
2015年勤工助学工作总结
2015/04/29 职场文书
小学班级标语口号大全
2015/12/26 职场文书
python编程简单几行代码实现视频转换Gif示例
2021/10/05 Python