Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:通过比较函数删除数组中的重复项_Javascript_Arrays - Fatal编程技术网

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;
}