js数组中对象去重的方法
eg:
let arr = [
{queuecode:"WQ000278315",queuename:"批次整合队列20190419050000002"},
{queuecode:"WQ000030521",queuename:"批次整合队列20190419050004545"},
{queuecode:"WQ000140631",queuename:"批次整合队列20170411212333002"},
{queuecode:"WQ000278315",queuename:"批次整合队列20190419051212000"},
{queuecode:"WQ000140631",queuename:"批次整合队列20200412245544545"},
]
1. 利用for循环
利用访问数组中每个对象唯一属性的属性值是否存在于新对象obj
中,如果存在跳过,不存在就在新对象中强行添加该属性值为属性,其属性值为ture,并把当前元素对象push到新数组中。
let newArr = [];
let obj ={};
for( var i = 0; i< arr.length ;i++){
if(!obj[arr[i].属性名]){
newArr.push(arr[i]);
obj[arr[i].属性名] = true;
}
}
在浏览器中运行:
2. 利用Array.prototype.reduce()方法
reduce() 接收一个回调函数作为累加器,数组中的每个值(从左到右)开始汇总,最终汇总为一个值。
回调函数第一个参数是每次汇总操作后的结果,第二个参数是当前元素。
实际上判断方法和使用循环一样,新建一个对象,新对象用来存储对比后的结果,即每次拿到的对象唯一属性的属性值是否存在新对象中,不存在就在新对象中强行添加该属性值为属性,其属性值为true
,并把当前元素对象push
到汇总操作的数组中。新数组用来接收汇总去重后得到的新数组。
let obj = {};
let newArr = arr.reduce(function(prev, elem) {
obj[elem.属性名] ? '' : obj[elem.属性名] = true && prev.push(elem);
return prev;
}, []);
console.log(newArr);