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 相关文章推荐
变量声明时命名与变量作为对象属性时命名的区别解析
Dec 06 Javascript
node.js中的http.get方法使用说明
Dec 14 Javascript
JQuery手速测试小游戏实现思路详解
Sep 20 Javascript
详解Vue用axios发送post请求自动set cookie
May 10 Javascript
jQuery实现的弹幕效果完整实例
Sep 06 jQuery
js截取字符串功能的实现方法
Sep 27 Javascript
Bootstrap实现可折叠分组侧边导航菜单
Mar 07 Javascript
详解Vue文档中几个易忽视部分的剖析
Mar 24 Javascript
Jquery实现无缝向上循环滚动列表的特效
Feb 13 jQuery
微信小程序--特定区域滚动到顶部时固定的方法
Apr 28 Javascript
Vue实现根据hash高亮选项卡
May 27 Javascript
layer.alert回调函数执行关闭弹窗的实例
Sep 11 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
MySQL的FIND_IN_SET函数使用方法分享
2012/03/27 PHP
使用php实现快钱支付功能(涉及到接口)
2013/07/01 PHP
php相对当前文件include其它文件的方法
2015/03/13 PHP
JavaScript confirm选择判断
2008/10/18 Javascript
javaScript Array(数组)相关方法简述
2009/07/25 Javascript
Javascript中获取出错代码所在文件及行数的代码
2010/09/23 Javascript
Js event事件在IE、FF兼容性问题
2011/01/01 Javascript
深入理解JavaScript 闭包究竟是什么
2013/04/12 Javascript
jquery文本框中的事件应用以输入邮箱为例
2014/05/06 Javascript
jQuery插件制作的实例教程
2016/05/16 Javascript
Webpack实现按需打包Lodash的几种方法详解
2017/05/08 Javascript
原生js简单实现放大镜特效
2017/05/16 Javascript
JS对象与JSON互转换、New Function()、 forEach()、DOM事件流等js开发基础小结
2017/08/10 Javascript
vue中简单弹框dialog的实现方法
2018/02/26 Javascript
Vue实现移动端页面切换效果【推荐】
2018/11/13 Javascript
Element-UI+Vue模式使用总结
2020/01/02 Javascript
JS实现滑动导航效果
2020/01/14 Javascript
[11:12]2018DOTA2国际邀请赛寻真——绿色长城OpTic
2018/08/10 DOTA
[51:53]完美世界DOTA2联赛决赛日 Inki vs LBZS 第二场 11.08
2020/11/10 DOTA
python逐行读取文件内容的三种方法
2014/01/20 Python
python实用代码片段收集贴
2015/06/03 Python
Python的自动化部署模块Fabric的安装及使用指南
2016/01/19 Python
Python2.7环境Flask框架安装简明教程【已测试】
2018/07/13 Python
python实现写数字文件名的递增保存文件方法
2018/10/25 Python
Python利用字典破解WIFI密码的方法
2019/02/27 Python
Python学习笔记之变量、自定义函数用法示例
2019/05/28 Python
python全栈要学什么 python全栈学习路线
2019/06/28 Python
python django中8000端口被占用的解决
2019/12/17 Python
python pyqtgraph 保存图片到本地的实例
2020/03/14 Python
利用python绘制中国地图(含省界、河流等)
2020/09/21 Python
EJB与JAVA BEAN的区别
2016/08/29 面试题
军校制空专业毕业生自我鉴定
2013/11/16 职场文书
医药营销个人求职信范文
2014/02/07 职场文书
2015年度电厂个人工作总结
2015/05/13 职场文书
Nginx配置之实现多台服务器负载均衡
2021/08/02 Servers
Java8中接口的新特性使用指南
2021/11/01 Java/Android