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 相关文章推荐
js 禁用只读文本框获得焦点时的退格键
Apr 25 Javascript
javascript向flash swf文件传递参数值注意细节
Dec 11 Javascript
js解析与序列化json数据(一)json.stringify()的基本用法
Feb 01 Javascript
jQuery实现高亮显示网页关键词的方法
Aug 07 Javascript
使用do...while的方法输入一个月中所有的周日(实例代码)
Jul 22 Javascript
jQuery多个版本和其他js库冲突的解决方法
Aug 11 Javascript
AngularJs基于角色的前端访问控制的实现
Nov 07 Javascript
JavaScript数组操作详解
Feb 04 Javascript
Angular2实现组件交互的方法分析
Dec 19 Javascript
浅谈Vue中render中的h箭头函数
Nov 07 Javascript
微信小程序实现时间进度条功能
Nov 17 Javascript
关于Vue中的options选项
Mar 22 Vue.js
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+APACHE实现用户论证的方法
2006/10/09 PHP
解析如何屏蔽php中的phpinfo()函数
2013/06/06 PHP
PHP下的Oracle客户端扩展(OCI8)安装教程
2014/09/10 PHP
php设置静态内容缓存时间的方法
2014/12/01 PHP
Laravel如何自定义command命令浅析
2019/03/23 PHP
Laravel 实现添加多语言提示信息
2019/10/25 PHP
PHP实现Snowflake生成分布式唯一ID的方法示例
2020/08/30 PHP
使用jquery插件实现图片延迟加载技术详细说明
2011/03/12 Javascript
Jquery公告滚动+AJAX后台得到数据
2011/04/14 Javascript
js里怎么取select标签里的值并修改
2012/12/10 Javascript
jquery 插件开发 extjs中的extend用法小结
2013/01/04 Javascript
超简单JS二级、多级联动的简单实例
2014/02/18 Javascript
javascript判断是手机还是电脑访问网页的简单实例分享
2014/06/03 Javascript
理解javascript中的回调函数(callback)
2014/09/02 Javascript
JS截取与分割字符串常用技巧总结
2015/11/10 Javascript
javascript事件绑定学习要点
2016/03/09 Javascript
Node.js+Express配置入门教程详解
2016/05/19 Javascript
用jquery快速解决IE输入框不能输入的问题
2016/10/04 Javascript
Vue内容分发slot(全面解析)
2017/08/19 Javascript
获取本机IP地址的实例(JavaScript / Node.js)
2017/11/24 Javascript
vue 中基于html5 drag drap的拖放效果案例分析
2018/11/01 Javascript
React实现全选功能
2020/08/25 Javascript
使用python解析xml成对应的html示例分享
2014/04/02 Python
Python使用CMD模块更优雅的运行脚本
2015/05/11 Python
深入理解python对json的操作总结
2017/01/05 Python
解决csv.writer写入文件有多余的空行问题
2018/07/06 Python
浅谈python的dataframe与series的创建方法
2018/11/12 Python
Pycharm远程调试原理及具体配置详解
2019/08/08 Python
使用CSS3的::selection改变选中文本颜色的方法
2015/09/29 HTML / CSS
HTML5视频播放插件 video.js介绍
2018/09/29 HTML / CSS
阿迪达斯比利时官方商城:adidas比利时
2016/10/10 全球购物
中国文明网签名寄语
2014/01/18 职场文书
园林专业毕业生自荐信
2014/07/04 职场文书
2014年银行个人工作总结
2014/12/05 职场文书
转让协议书
2015/01/27 职场文书
工作服管理制度范本
2015/08/06 职场文书