【原】js数组对象去重最简单的方法
2019-04-26 08:20:38来源:博客园 阅读 ()
简单的数组去重是比较简单的,方法也特别多,如给下面的数组去重:
let arr = [1,2,2,4,9,6,7,5,2,3,5,6,5]
最常用的可以用for循环套for循环,再用splice删除重复的数组:
let arrUnique = function (arr){ for(let i=0; i<arr.length; i++){ for(let j=i+1; j<arr.length; j++){ if(arr[i]==arr[j]){ //第一个等同于第二个,splice方法删除第二个 arr.splice(j,1); j--; } } } return arr; }
然而数组的子集为对象时,一般不使用多个for循环来去重,如下面的数组对象:
let arr = [ { mch_id:'ghx1', status: 1, type: 2 }, { mch_id:'awx2', status: 2, type: 3 }, { mch_id:'ghx1', status: 1, type: 2 }, { status: 1, type: 2, mch_id:'ghx1' } ]
通过观察,我们可以发现该数组中的第1、3、4项其实是一样的,最初在谷歌找了几个方法最终都不太满意,比如会改变数组中对象原来的排序、数组去重失败等,后来经过多次尝试和实践,得出以下最简单的方法:
- 利用对象的键名无法重复的特点,我们可以新建一个临时对象来存储原数组中的对象子集的值,比如我的项目中mch_id是唯一的ID,然后设置的它为临时对象的键名,值为true即可,保证它的唯一性
- 通过判断对象的键名是唯一时,把对应的数组值添加到一个空数组中,最终得到一个去重后的数组对象
- 此方法不会改变数组对象原有的排序
let arrUnique = function(arr){ let result = {}; let finalResult=[]; for(let i=0;i<arr.length;i++){ //利用对象的键名无法重复的特点,cpmch_id是唯一区别的属性值 result[arr[i].mch_id] ? '' : result[arr[i].mch_id] = true && finalResult.push(arr[i]); } return finalResult; }
或者利用ES5数组方法reduce
let arrUnique = function(arr){ let ojb = {}; arr = arr.reduce(function(prevArr, currentItem) { //利用对象的键名无法重复的特点,mch_id是唯一区别的属性值 ojb[currentItem.mch_id] ? '' : ojb[currentItem.mch_id] = true && prevArr.push(currentItem); return prevArr }, []) return arr; }
提前祝大家劳动节快乐
原文链接:https://www.cnblogs.com/PeunZhang/p/10773351.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- javascript面向对象入门基础详细介绍 2020-03-29
- JS简单去除数组中重复项的方法 2020-03-16
- 关于JS array的数组 2020-03-08
- javascript过滤数组重复元素的实现方法 2020-03-05
- jquery遍历筛选数组的几种方法和遍历解析json对象 2020-02-29
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash