Javascript:通过比较函数删除数组中的重复项
我有一个包含如下对象的数组:Javascript:通过比较函数删除数组中的重复项,javascript,arrays,Javascript,Arrays,我有一个包含如下对象的数组: const array = [ {name:'obj1', address: 987, id: '123', location: 'zyx' }, {name:'obj2', address: 654, id: '456', location: 'wvu'}, {name:'obj3', address: 321, id: '123', location: 'zyx'} ]; 我想用一个比较函数来删除重复项: const compareOb
const array = [
{name:'obj1', address: 987, id: '123', location: 'zyx' },
{name:'obj2', address: 654, id: '456', location: 'wvu'},
{name:'obj3', address: 321, id: '123', location: 'zyx'}
];
我想用一个比较函数来删除重复项:
const compareObjects = (a, b) => {
return a.id === b.id && a.location === b.location;
}
该函数仅比较对象的相关属性
如何使用此函数从阵列中删除重复项
编辑:为了澄清,我想使用一个函数来比较对象的某些属性,而不是整个对象。显而易见的解决方案是将每个元素与其他元素进行比较(除了它本身):
也就是O(n)(也称为超快速,但会消耗更多内存)。您可以通过检查临时结果集的对象来减少数组
const
数组=[{name:'obj1',地址:987,id:'123',位置:'zyx'},{name:'obj2',地址:654,id:'456',位置:'wvu'},{name:'obj3',地址:321,id:'123',位置:'zyx'}],
比较对象=(a,b)=>a.id==b.id&&a.location==b.location,
结果=数组。减少((r,o)=>{
if(!r.some(compareObject.bind(null,o))){
r、 推(o);
}
返回r;
}, []);
控制台日志(结果)代码>
。作为控制台包装{max height:100%!important;top:0;}
您可以尝试下面的函数
function unique(array , compareObjects){
array.sort(compareObjects);
for(var i = 1; i < array.length; ){
if( compareObjects(array[i-1], array[i]) === 0){
array.splice(i, 1);
} else {
i++;
}
}
return array;
}
函数唯一(数组、比较对象){
排序(比较对象);
对于(变量i=1;i
可能的重复项在数组上使用嵌套循环,并删除元素(如果该元素之前的子列表中存在)。
const dupes = new Set;
const key = el => el.id + "|" + el.location;
const result = array.filter(it => !dupes.has(key(el)) && dupes.add(key(el)));
function unique(array , compareObjects){
array.sort(compareObjects);
for(var i = 1; i < array.length; ){
if( compareObjects(array[i-1], array[i]) === 0){
array.splice(i, 1);
} else {
i++;
}
}
return array;
}