如果是字符串数组,可以直接用es6的方法Array.from(new Set(arr))处理,但是通常我们接触到的数组都是对象数组,所以有以下两个小方法。
1.for循环
每次从原数组中取出一个对象,然后到新的对象中去访问这个对象的属性,如果能访问到值,则说明重复,否则把取出的这个对象放到结果数组中,同时把取出的这个对象的属性作为新对象的一个属性,并赋值为true
let arr = [
{
id: 111,
value: 'dsada'
},
{
id: 222,
value: 'dseqwada'
},
{
id: 333,
value: 'dsaeqwda'
},
{
id: 444,
value: 'dsadfega'
},
{
id: 111,
value: 'dsada'
},
{
id: 444,
value: 'dsadfega'
},
]
function uniqueArr(arr, key){
let agentObj = {};
let agentArr = [];
for(let i = 0; i < arr.length; i++){
if(!agentObj[arr[i][key]]){
agentArr.push(arr[i]);
agentObj[arr[i][key]] = true;
}
}
return agentArr;
}
arr = uniqueArr(arr, 'id');
console.log(arr);
2.用reduce方法
let arr = [
{
id: 111,
value: 'dsada'
},
{
id: 222,
value: 'dseqwada'
},
{
id: 333,
value: 'dsaeqwda'
},
{
id: 444,
value: 'dsadfega'
},
{
id: 111,
value: 'dsada'
},
{
id: 444,
value: 'dsadfega'
},
]
function reduceArr(arr, key){
let hash = {};
arr = arr.reduce(function(item, next) {
hash[next[key]] ? '' : hash[next[key]] = true && item.push(next);
return item
}, [])
return arr;
}
arr = reduceArr(arr, 'id');
console.log(arr);
其实两个方法原理类似,只是写法不同。
网友评论