我有一个包含对象数组的对象。
obj = {};
obj.arr = new Array();
obj.arr.push({place:"here",name:"stuff"});
obj.arr.push({place:"there",name:"morestuff"});
obj.arr.push({place:"there",name:"morestuff"});
我想知道从数组中删除重复对象的最佳方法是什么。例如,obj.arr将变成。。。
{place:"here",name:"stuff"},
{place:"there",name:"morestuff"}
这是我的解决方案,将实际数组添加到键值对象中,其中键将是唯一标识,值可以是对象或整个对象的任何属性。
说明:具有重复项的主数组将转换为键/值对象如果Id已存在于唯一对象中,则该值将被覆盖。最后,只需将唯一对象转换为数组。
getUniqueItems(array) {
const unique = {};
// here we are assigning item.name but it could be a complete object.
array.map(item => unique[item.Id] = item.name);
// here you can transform your array item like {text: unique[key], value: key} but actually you can do what ever you want
return Object.keys(unique).map(key => ({text: unique[key], value: key}));
})
);
}
TypeScript函数将数组过滤到其唯一元素,其中唯一性由给定的谓词函数决定:
function uniqueByPredicate<T>(arr: T[], predicate: (a: T, b: T) => boolean): T[] {
return arr.filter((v1, i, a) => a.findIndex(v2 => predicate(v1, v2)) === i);
}
不打字员:
function uniqueByPredicate(arr, predicate) {
return l.filter((v1, i, a) => a.findIndex(v2 => predicate(v1, v2)) === i);
}
可以使用for循环和条件使其唯一
const data = [
{ id: 1 },
{ id: 2 },
{ id: 3 },
{ id: 4 },
{ id: 5 },
{ id: 6 },
{ id: 6 },
{ id: 6 },
{ id: 7 },
{ id: 8 },
{ id: 8 },
{ id: 8 },
{ id: 8 }
];
const filtered= []
for(let i=0; i<data.length; i++ ){
let isHasNotEqual = true
for(let j=0; j<filtered.length; j++ ){
if (filtered[j].id===data[i].id){
isHasNotEqual=false
}
}
if (isHasNotEqual){
filtered.push(data[i])
}
}
console.log(filtered);
/*
output
[ { id: 1 },
{ id: 2 },
{ id: 3 },
{ id: 4 },
{ id: 5 },
{ id: 6 },
{ id: 7 },
{ id: 8 } ]
*/