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))