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 相关文章推荐
jquery插件 cluetip 关键词注释
Jan 12 Javascript
基于jquery的自定义鼠标提示效果 jquery.toolTip
Nov 14 Javascript
基于jquery的防止大图片撑破页面的实现代码(立即缩放)
Oct 24 Javascript
Extjs3.0 checkboxGroup 动态添加item实现思路
Aug 14 Javascript
jquery超简单实现手风琴效果的方法
Jun 05 Javascript
基于jquery编写的放大镜插件
Mar 23 Javascript
JS判断浏览器是否安装flash插件的简单方法
Sep 13 Javascript
JS判断来路是否是百度等搜索索引进行弹窗或自动跳转的实现代码
Oct 09 Javascript
AngularJS通过ng-route实现基本的路由功能实例详解
Dec 13 Javascript
Bootstrap组件之下拉菜单,多级菜单及按钮布局方法实例
May 25 Javascript
React Native时间转换格式工具类分享
Oct 24 Javascript
jquery ajax 请求小技巧实例分析
Nov 11 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 方便水印和缩略图的图形类
2009/05/21 PHP
PHP+Mysql+Ajax实现淘宝客服或阿里旺旺聊天功能(前台页面)
2017/06/16 PHP
javascript  Error 对象 错误处理
2008/05/18 Javascript
使用ExtJS技术实现的拖动树结点
2010/08/05 Javascript
jQuery中的.bind()、.live()和.delegate()之间区别分析
2011/06/08 Javascript
javascript变量作用域使用中常见错误总结
2013/03/26 Javascript
js捕获鼠标滚轮事件代码
2013/12/16 Javascript
NODE.JS加密模块CRYPTO常用方法介绍
2014/06/05 Javascript
javascript制作的cookie封装及使用指南
2015/01/02 Javascript
如何通过js实现图片预览功能【附实例代码】
2016/03/30 Javascript
jQuery 中的 DOM 操作
2016/04/26 Javascript
JavaScript中日期函数的相关操作知识
2016/08/03 Javascript
Vue 自定义动态组件实例详解
2018/03/28 Javascript
用vue-cli开发vue时的代理设置方法
2018/09/20 Javascript
一个小时快速搭建微信小程序的方法步骤
2019/04/15 Javascript
详解Vue中组件的缓存
2019/04/20 Javascript
vue 解决移动端弹出键盘导致页面fixed布局错乱的问题
2019/11/06 Javascript
[02:14]DOTA2英雄基础教程 修补匠
2013/12/23 DOTA
[57:22]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第五场
2018/04/10 DOTA
Python的一些用法分享
2012/10/07 Python
从零学Python之入门(四)运算
2014/05/27 Python
Python获取央视节目单的实现代码
2015/07/25 Python
使用Python的Bottle框架写一个简单的服务接口的示例
2015/08/25 Python
Python实现二维数组按照某行或列排序的方法【numpy lexsort】
2017/09/22 Python
实例讲解Python3中abs()函数
2019/02/19 Python
python用类实现文章敏感词的过滤方法示例
2019/10/27 Python
wxPython实现整点报时
2019/11/18 Python
np.dot()函数的用法详解
2020/01/17 Python
英国一家集合了众多有才华设计师品牌的奢侈店:Wolf & Badger
2018/04/18 全球购物
英国最大的宠物商店:Pets at Home
2019/04/17 全球购物
求职简历的自我评价
2014/01/31 职场文书
荷叶圆圆教学反思
2014/02/01 职场文书
国培计划培训感言
2014/03/11 职场文书
党委领导班子整改方案
2014/09/30 职场文书
党的群众路线教育实践活动教师自我剖析材料
2014/10/09 职场文书
介绍信范文大全
2015/05/07 职场文书