Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.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 JS将两个数组与对象进行比较,并以ES6方式删除重复的属性名_Javascript_Ecmascript 6 - Fatal编程技术网

Javascript JS将两个数组与对象进行比较,并以ES6方式删除重复的属性名

Javascript JS将两个数组与对象进行比较,并以ES6方式删除重复的属性名,javascript,ecmascript-6,Javascript,Ecmascript 6,要将两个数组与对象进行比较并按其属性名删除duplicate,我有以下两个: arr1 = [{ item:"apple", description: "lorem" },{ item:"peach", description: "impsum" }] arr2 = [{ item:"apple", description: "dolor" },{ item:"grape", description: "enum" }] 我想要这个结果: arr3 = [{ it

要将两个数组与对象进行比较并按其属性名删除duplicate,我有以下两个:

arr1 = [{
  item:"apple",
  description: "lorem"
},{
  item:"peach",
  description: "impsum"
}]

arr2 = [{
  item:"apple", description: "dolor"
},{
  item:"grape", description: "enum"
}]
我想要这个结果:

arr3 = [{
  item:"peach", description: "impsum"
},{
  item:"grape", description: "enum"
}]

我尝试过这种es6方法,但不起作用
arr3=arr1.filter(val=>!arr2.includes(val))
数组。includes
不起作用,因为在javascript中
{}!=={}
。您需要另一种方法,如
Array.each
,以检查其他数组中的每个对象的属性
项的值是否与当前对象的值相同。此外,您还需要同时执行
arr1.filter(…)
arr2.filter(…)
concat
结果:

arr3 = [].concat(
    arr1.filter(obj1 => arr2.every(obj2 => obj1.item !== obj2.item)),
    arr2.filter(obj2 => arr1.every(obj1 => obj2.item !== obj1.item))
);
示例:

让arr1=[{
项目:“苹果”,
描述:“lorem”
},{
物品:“桃子”,
描述:“impsum”
}];
设arr2=[{
项目:“苹果”,描述:“多洛”
},{
项目:“葡萄”,描述:“枚举”
}];
设arr3=[].concat(
arr1.filter(obj1=>arr2.every(obj2=>obj1.item!==obj2.item)),
arr2.filter(obj2=>arr1.every(obj1=>obj2.item!==obj1.item))
);

控制台日志(arr3)
数组。includes
不起作用,因为在javascript
{}!={}
。您需要另一种方法,如
Array.each
,以检查其他数组中的每个对象的属性
项的值是否与当前对象的值相同。此外,您还需要同时执行
arr1.filter(…)
arr2.filter(…)
concat
结果:

arr3 = [].concat(
    arr1.filter(obj1 => arr2.every(obj2 => obj1.item !== obj2.item)),
    arr2.filter(obj2 => arr1.every(obj1 => obj2.item !== obj1.item))
);
示例:

让arr1=[{
项目:“苹果”,
描述:“lorem”
},{
物品:“桃子”,
描述:“impsum”
}];
设arr2=[{
项目:“苹果”,描述:“多洛”
},{
项目:“葡萄”,描述:“枚举”
}];
设arr3=[].concat(
arr1.filter(obj1=>arr2.every(obj2=>obj1.item!==obj2.item)),
arr2.filter(obj2=>arr1.every(obj1=>obj2.item!==obj1.item))
);
控制台日志(arr3)有关更多信息,请参见和

//无需重复即可加入。
const joinwithout重复=(A,B)=>{
常量a=新集合(a.map(x=>x.item))
常量b=新集合(b.map(x=>x.item))
返回[…A.filter(x=>!b.has(x.item)),…b.filter(x=>!A.has(x.item))]
}
//证明。
const output=joinwithout重复([{item:“apple”,description:“lorem”},{item:“peach”,description:“impsum”}],{item:“apple”,description:“dolor”},{item:“grape”,description:“enum”}])
console.log(输出)
有关更多信息,请参阅和

//无需重复即可加入。
const joinwithout重复=(A,B)=>{
常量a=新集合(a.map(x=>x.item))
常量b=新集合(b.map(x=>x.item))
返回[…A.filter(x=>!b.has(x.item)),…b.filter(x=>!A.has(x.item))]
}
//证明。
const output=joinwithout重复([{item:“apple”,description:“lorem”},{item:“peach”,description:“impsum”}],{item:“apple”,description:“dolor”},{item:“grape”,description:“enum”}])

console.log(输出)
一个简单而快速的示例:

arr1=[{
项目:“苹果”,
描述:“lorem”
},{
物品:“桃子”,
描述:“impsum”
}]
arr2=[{
项目:“苹果”,描述:“多洛”
},{
项目:“葡萄”,描述:“枚举”
}]
结果=(counters={},arr1.concat(arr2.map)(cur=>(counters[cur.item]?counters[cur.item]+:(counters[cur.item]=1,cur)).filter(cur=>counters[cur.item]==1))

console.log(result)
一个简单而快速的示例:

arr1=[{
项目:“苹果”,
描述:“lorem”
},{
物品:“桃子”,
描述:“impsum”
}]
arr2=[{
项目:“苹果”,描述:“多洛”
},{
项目:“葡萄”,描述:“枚举”
}]
结果=(counters={},arr1.concat(arr2.map)(cur=>(counters[cur.item]?counters[cur.item]+:(counters[cur.item]=1,cur)).filter(cur=>counters[cur.item]==1))

console.log(result)
您的问题有误导性,所有数组上的属性名称都相同,属性名称和属性值是两个不同的东西,您想要什么?您的问题有误导性,所有数组上的属性名称都相同,属性名称和属性值是两个不同的东西,你想要什么?