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_Ecmascript 6_Duplicates - Fatal编程技术网

Javascript 如何检查对象数组是否具有具有更多属性的重复属性值?

Javascript 如何检查对象数组是否具有具有更多属性的重复属性值?,javascript,arrays,ecmascript-6,duplicates,Javascript,Arrays,Ecmascript 6,Duplicates,我搜索了StackOverflow并找到了这个,但它并没有解决我的问题 我的问题是,我的数组是这样的: 设arr=[ {类型:1,id:1,名称:'aa'}, {type:1,id:1,name:'bb'}, {type:2,id:1,name:'cc'} ] 我需要找到相同的类型和id,然后识别出这是重复的对象。上面,arr[0]和arr[1]是重复的,但arr[0]和arr[2]不是。我尝试过使用ES6方法,例如.some、.every和一组,但这些方法都不适合我。如何解决此问题?您可以使用

我搜索了StackOverflow并找到了这个,但它并没有解决我的问题

我的问题是,我的数组是这样的:

设arr=[ {类型:1,id:1,名称:'aa'}, {type:1,id:1,name:'bb'}, {type:2,id:1,name:'cc'} ] 我需要找到相同的类型和id,然后识别出这是重复的对象。上面,arr[0]和arr[1]是重复的,但arr[0]和arr[2]不是。我尝试过使用ES6方法,例如.some、.every和一组,但这些方法都不适合我。如何解决此问题?

您可以使用.map将每个对象映射到字符串。每个字符串都采用该对象的类型id的形状。然后,使用集合可以删除所有重复的字符串。然后,您可以检查设置的大小是否等于数组长度,以确定数组中是否存在任何重复项:

const containsDups=arr=>new Setarr.map{type,id}=>`${type}-${id}`。size!==棱长; const arr=[{type:1,id:1,name:'aa'},{type:1,id:1,name:'bb'},{type:2,id:1,name:'cc'}]; console.logcontainsDupsarr 可以使用.map将每个对象映射到字符串。每个字符串都采用该对象的类型id的形状。然后,使用集合可以删除所有重复的字符串。然后,您可以检查设置的大小是否等于数组长度,以确定数组中是否存在任何重复项:

const containsDups=arr=>new Setarr.map{type,id}=>`${type}-${id}`。size!==棱长; const arr=[{type:1,id:1,name:'aa'},{type:1,id:1,name:'bb'},{type:2,id:1,name:'cc'}]; console.logcontainsDupsarr 您可以使用设置:

Set是ES6中引入的一个新数据对象。因为Set只允许存储唯一的值

const seen=新集合; 常数arr=[ {类型:1,id:1,名称:'aa'}, {type:1,id:1,name:'bb'}, {type:2,id:1,name:'cc'} ]; 常数filterDarr=arr.filterre,索引=>{ const duplicate=seen.hasel.type,el.id; seen.addel.type,el.id; console.log'index:'+index+'是重复的:'+replicate; return!duplicate;//如果您只需要一个布尔值,这就是您要查找的。 }; log'newarray:'+JSON.stringifyfilteradar 您可以使用设置:

Set是ES6中引入的一个新数据对象。因为Set只允许存储唯一的值

const seen=新集合; 常数arr=[ {类型:1,id:1,名称:'aa'}, {type:1,id:1,name:'bb'}, {type:2,id:1,name:'cc'} ]; 常数filterDarr=arr.filterre,索引=>{ const duplicate=seen.hasel.type,el.id; seen.addel.type,el.id; console.log'index:'+index+'是重复的:'+replicate; return!duplicate;//如果您只需要一个布尔值,这就是您要查找的。 };
log'newarray:'+JSON.stringifyfilteradar 可以按属性(如类型和id)分组,然后检查名称是否超过1。如果是,则表示至少有一个副本:

const result = [...arr.reduce((r, o) => {
    const key = o.type + '-' + o.id;
    const item = r.get(key) || Object.assign({}, o, {
        names: []
    });
    item.names.push(o.name);
    return r.set(key, item);
}, new Map).values()];
例如:

设arr=[{type:1,id:1,name:'aa'},{type:1,id:1,name:'bb'},{type:2,id:1,name:'cc'}] const result=[…arr.reducer,o=>{ const key=o.type+'-'+o.id; const item=r.getkey | | Object.assign{},o{ 姓名:[] }; item.names.pusho.name; 返回r.setkey,项目; },新地图值];
console.log`是否存在重复项:`,result.somes=>s.names.length>1 可以按属性(如类型和id)分组,然后检查名称是否超过1。如果是,则表示至少有一个副本:

const result = [...arr.reduce((r, o) => {
    const key = o.type + '-' + o.id;
    const item = r.get(key) || Object.assign({}, o, {
        names: []
    });
    item.names.push(o.name);
    return r.set(key, item);
}, new Map).values()];
例如:

设arr=[{type:1,id:1,name:'aa'},{type:1,id:1,name:'bb'},{type:2,id:1,name:'cc'}] const result=[…arr.reducer,o=>{ const key=o.type+'-'+o.id; const item=r.getkey | | Object.assign{},o{ 姓名:[] }; item.names.pusho.name; 返回r.setkey,项目; },新地图值];
console.log`是否存在重复项:`,result.somes=>s.names.length>1;你期望的结果是什么?布尔值?删除重复项的数组?是的,我只需要布尔结果。您期望的结果是什么?布尔值?删除重复项的数组?是的,我只需要布尔结果。add和.has方法只接受一个值。因此,如果第二个对象与第一个对象具有相同的类型但不同的id,它仍将被删除。add和。has方法只接受一个值。因此,如果第二个对象与第一个对象具有相同的类型,但id不同,它仍将被删除。为什么Set无法确定对象的重复项?我已尝试让Set=new Set;添加{type:1,id:1};添加{type:1,id:1};console.logset.size//2为什么?@yang,因为对象是引用类型,所以如果两个对象是不同的引用类型,则它们不相同。所以{}={}将返回true。因为不能像这样确定对象相等,所以集合也不能确定两个对象何时相等。所以,你们需要使用一个字符串,其中的等式在哪里,为什么工作集不能确定对象的重复?我已经试过了
集合=新集合;添加{type:1,id:1};添加{type:1,id:1};console.logset.size//2为什么?@yang,因为对象是引用类型,所以如果两个对象是不同的引用类型,则它们不相同。所以{}={}将返回true。因为不能像这样确定对象相等,所以集合也不能确定两个对象何时相等。所以,您需要使用一个字符串,其中等式起作用