如何给一个数组对象去重

1.利用indexOf

var arr = []
var data = [
    {id:1,time:'1'},
    {id:2,time:'2'},
    {id:2,time:'3'},
]
for(let val of data){
    arr.push(val.id)
}
var newArr = [];
var newArr2 = [];
for(var i =0;i<arr.length-1;i++){
    if(newArr.indexOf(arr[i]) == -1){
        newArr.push(arr[i]);
        newArr2.push(data[i]);
    }
}
data= newArr2;
//[{id: 1, time: "1"}, {id: 2, time: "2"}]

2.直接for循环,利用对象属性的唯一性

 var arr = [
     {id:'1',data:'1'},
     {id:'2',data:'2'},
     {id:'1',data:'1'},
 ]
 

 var result = {}
 for(var i=0;i<arr.length;i++){
     result[arr[i]['id']] = arr[i]
 }
console.log('11',result)

3.es5数组新方法  reduce

var arr = [
{id:'1',data:'1'},
{id:'2',data:'2'},
{id:'1',data:'1'},
]

function norepeat(objArray){
var hash = {};
//reduce方法有两个参数,第一个参数是一个callback,用于针对数组项的操作;第二个参数则是传入的初始值,这个初始值用于单个数组项的操作。
objArray = objArray.reduce(function(item, next) {//这是针对数组项操作的函数,对于每个数组项,reduce方法都会将其调用一次
//可使用最多四个参数来声明回调函数(第一个参数:通过上一次调用回调函数获得的值;第二个参数:当前数组元素的值;第三个参数:当前数组元素的数字索引;第四个参数:包含该元素的数组对象)
//这里只使用了两个参数,所以item和next分别代表上一次调用回调函数后的值和objArray项值
hash[next.id]?'':hash[next.id]=true&&item.push(next);//与func3逻辑相似
return item;
}, []);//初始值是一个空对象,使用reduce方法返回的是空对象通过叠加执行之后的结果
return objArray;
}
console.log('11',norepeat(arr))

猜你喜欢

转载自www.cnblogs.com/aloehui/p/9256222.html