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二维数组采用定义数组的数组来实现
Dec 09 Javascript
jQuery让控件左右移动的三种实现方法
Sep 08 Javascript
EasyUI实现第二层弹出框的方法
Mar 01 Javascript
JavaScript实现Base64编码转换
Apr 23 Javascript
JS中的==运算: [''] == false —&gt;true
Jul 24 Javascript
javascript ASCII和Hex互转的实现方法
Dec 27 Javascript
React Js 微信禁止复制链接分享禁止隐藏右上角菜单功能
May 26 Javascript
BootStrap selectpicker后台动态绑定数据
Jun 01 Javascript
使用jQuery实现两个div中按钮互换位置的实例代码
Sep 21 jQuery
基于Bootstrap表单验证功能
Nov 17 Javascript
AngularJS中重新加载当前路由页面的方法
Mar 09 Javascript
js实现限定范围拖拽的示例
Oct 26 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
让这部DC动画新作刷新你的认知
2020/03/03 欧美动漫
PHP网上调查系统
2006/10/09 PHP
克隆一个新项目的快捷方式
2013/04/10 PHP
深入密码加salt原理的分析
2013/06/06 PHP
PHP编程开发怎么提高编程效率 提高PHP编程技术
2015/11/09 PHP
PHP实现数据分页显示的简单实例
2016/05/26 PHP
PHP脚本自动识别验证码查询汽车违章
2016/12/20 PHP
js中split函数的使用方法说明
2013/12/26 Javascript
JavaScript控制listbox列表框的项目上下移动的方法
2015/03/18 Javascript
JavaScript实现输入框(密码框)出现提示语
2016/01/12 Javascript
jQuery+css3实现转动的正方形效果(附demo源码下载)
2016/01/27 Javascript
怎样判断jQuery当前元素是隐藏还是显示
2016/11/23 Javascript
JavaScript实现水平进度条拖拽效果
2017/01/18 Javascript
Easyui使用Dialog行内按钮布局的实例
2017/07/27 Javascript
JS如何在数组指定位置插入元素
2020/03/10 Javascript
Vue 数据绑定的原理分析
2020/11/16 Javascript
[01:34]DOTA2 7.22版本新增神杖效果一览(敏捷英雄篇)
2019/05/28 DOTA
python编程-将Python程序转化为可执行程序[整理]
2007/04/09 Python
python生成指定尺寸缩略图的示例
2014/05/07 Python
使用Python中的线程进行网络编程的入门教程
2015/04/15 Python
Python创建xml文件示例
2017/03/22 Python
Python多线程同步---文件读写控制方法
2019/02/12 Python
PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法
2019/08/06 Python
解决python3 requests headers参数不能有中文的问题
2019/08/21 Python
python基于FTP实现文件传输相关功能代码实例
2019/09/28 Python
python3中datetime库,time库以及pandas中的时间函数区别与详解
2020/04/16 Python
python 实现PIL模块在图片画线写字
2020/05/16 Python
详解Html5微信支付爬坑之路
2018/07/24 HTML / CSS
HTML5 Canvas锯齿图代码实例
2014/04/10 HTML / CSS
英国骑行、跑步、游泳、铁人三项运动装备专卖店:Wiggle
2016/08/23 全球购物
日本最大的购物网站:日本乐天市场(Rakuten Ichiba)
2020/11/04 全球购物
毕业生求职简历中的自我评价
2013/10/18 职场文书
电脑教师的自我评价
2013/12/18 职场文书
给领导的检讨书
2014/02/16 职场文书
六年级小学生评语
2014/12/26 职场文书
合理缓解职场压力,让你随时保持最佳状态!
2019/06/21 职场文书