Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.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
NodeJS/Javascript在不同数组中查找具有相同属性的对象_Javascript_Arrays_Node.js_Object - Fatal编程技术网

NodeJS/Javascript在不同数组中查找具有相同属性的对象

NodeJS/Javascript在不同数组中查找具有相同属性的对象,javascript,arrays,node.js,object,Javascript,Arrays,Node.js,Object,我在NodeJS中做一些工作,需要比较不同数组中的对象以获得重复的属性 例如: Items = [{"id": "10", "name": "milk"},{"id":"7", "name": "banana"},{"id":"47", "name": "cheese"},{"id":"6", "name":"carrot"}] Fridge = [{"id":"19", "name": "cheese"},{"id": "10", "name": "milk"},{"id":"43","nam

我在NodeJS中做一些工作,需要比较不同数组中的对象以获得重复的属性

例如:

Items = [{"id": "10", "name": "milk"},{"id":"7", "name": "banana"},{"id":"47", "name": "cheese"},{"id":"6", "name":"carrot"}]
Fridge = [{"id":"19", "name": "cheese"},{"id": "10", "name": "milk"},{"id":"43","name": "egg"}, {"id":"6", "name":"not a carrot"}]
我想获取数组中所有属性都包含在两个数组中的对象。(糟糕的解释,参见示例)

在这个例子中,我想得到

Output = [{"id": "10", "name": "milk"},{"id":"6", "name":"not a carrot"}]
因为两个输入数组中只存在这两个ID


如何执行此操作?

您可以将
包含
方法与
过滤器
结合使用

Items=[{“id”:“10”,“name”:“milk”},{“id”:“7”,“name”:“banana”},{“id”:“47”,“name”:“cheese”},{“id”:“6”,“name”:“carrot”}]
冰箱=[{“id”:“19”,“名称”:“奶酪”},{“id”:“10”,“名称”:“牛奶”},{“id”:“43”,“名称”:“鸡蛋”},{“id”:“6”,“名称”:“不是胡萝卜”}]
结果=冰箱.filter(item=>Items.map(f=>f.id).includes(item.id));

控制台日志(结果)您可以使用lodash.js轻松实现这一点,如下所示:

如果您只想检查id:

let Items=[{“id”:“10”,“name”:“milk”},{“id”:“7”,“name”:“banana”},{“id”:“47”,“name”:“cheese”},{“id”:“6”,“name”:“carrot”}]
让冰箱=[{“id”:“19”,“名称”:“奶酪”},{“id”:“10”,“名称”:“牛奶”},{“id”:“43”,“名称”:“鸡蛋”},{“id”:“6”,“名称”:“不是胡萝卜”}]
让结果=uu.intersectionBy(冰箱、物品、'id');
控制台日志(结果)

这是另一种有用的方法,可以使用n个对象数组作为输入来查找重复项:

var Items = [{"id": "10", "name": "milk"},{"id":"7", "name": "banana"},{"id":"47", "name": "cheese"},{"id":"6", "name":"carrot"}];
var Fridge = [{"id":"19", "name": "cheese"},{"id": "10", "name": "milk"},{"id":"43","name": "egg"}, {"id":"6", "name":"not a carrot"}];

var mergedArrray = Items.concat(Fridge); //merge all
//array1 = array1.concat(array2, array3, array4, ..., arrayN);    


var duplicateIds = [];
var uniqueIds = [];

//The idea is look for the id in uniqueIds, if exist push into duplicateIds
//if not push into uniqueIds 
mergedArrray.map((obj,v)=>{
(uniqueIds.indexOf(obj.id) == -1)?uniqueIds.push(obj.id):duplicateIds.push(obj.id);
})

console.log(duplicateIds);
console.log(uniqueIds);
此解决方案不返回重复数组,只返回引用