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 相关文章推荐
Firefox/Chrome/Safari的中可直接使用$/$$函数进行调试
Feb 13 Javascript
javascript移出节点removeChild()使用介绍
Apr 03 Javascript
JavaScript中对象property的读取和写入方法介绍
Dec 30 Javascript
JavaScript 表单处理实现代码
Apr 13 Javascript
JS实现仿QQ聊天窗口抖动特效
May 10 Javascript
温习Javascript基础语法之词法结构
May 31 Javascript
Javascript封装id、class与元素选择器方法示例
Mar 13 Javascript
JavaScript 函数的定义-调用、注意事项
Apr 16 Javascript
ES6新特性四:变量的解构赋值实例
Apr 21 Javascript
详解webpack中的hash、chunkhash、contenthash区别
Jan 05 Javascript
vue-cli监听组件加载完成的方法
Sep 07 Javascript
通过jQuery学习js类型判断的技巧
May 27 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可变函数的使用详解
2013/06/14 PHP
php中文繁体和简体相互转换的方法
2015/03/21 PHP
php中注册器模式类用法实例分析
2015/11/03 PHP
PHP动态生成指定大小随机图片的方法
2016/03/25 PHP
分享一个漂亮的php验证码类
2016/09/29 PHP
phpinfo无法显示的原因及解决办法
2019/02/15 PHP
PHP项目多语言配置平台实现过程解析
2020/05/18 PHP
JS 无法通过W3C验证的处理方法
2010/03/09 Javascript
js实现的复制兼容chrome和IE
2014/04/03 Javascript
JS实现简单的顶部定时关闭层效果
2014/06/15 Javascript
DOM基础教程之事件对象
2015/01/20 Javascript
AngularJS中的$watch(),$digest()和$apply()区分
2016/04/04 Javascript
Bootstrap+jfinal退出系统弹出确认框的实现方法
2016/05/30 Javascript
js实现统计字符串中特定字符出现个数的方法
2016/08/02 Javascript
JavaScript中apply方法的应用技巧小结
2016/09/29 Javascript
纯js实现html转pdf的简单实例(推荐)
2017/02/16 Javascript
一次围绕setTimeout的前端面试经验分享
2017/06/15 Javascript
JavaScript用二分法查找数据的实例代码
2017/06/17 Javascript
Cocos2d实现刮刮卡效果
2018/12/20 Javascript
jQuery动态生成的元素绑定事件操作实例分析
2019/05/04 jQuery
vue-i18n结合Element-ui的配置方法
2019/05/20 Javascript
Node.js从字符串生成文件流的实现方法
2019/08/18 Javascript
Python正则表达式完全指南
2017/05/25 Python
利用python求解物理学中的双弹簧质能系统详解
2017/09/29 Python
解决pandas无法在pycharm中使用plot()方法显示图像的问题
2018/05/24 Python
Django Admin中增加导出Excel功能过程解析
2019/09/04 Python
Python Pandas 转换unix时间戳方式
2019/12/07 Python
python logging设置level失败的解决方法
2020/02/19 Python
css3中背景尺寸background-size详解
2014/09/02 HTML / CSS
html5中canvas学习笔记2-判断浏览器是否支持canvas
2013/01/06 HTML / CSS
美国排名第一的泳池用品直接来源:In The Swim
2019/09/23 全球购物
医药销售求职信范文
2014/02/01 职场文书
物业保安员岗位职责
2014/03/14 职场文书
教师自我剖析材料
2014/09/29 职场文书
Vue+Element UI实现概要小弹窗的全过程
2021/05/30 Vue.js
Docker安装MySql8并远程访问的实现
2022/07/07 Servers