NodeJS/Javascript在不同数组中查找具有相同属性的对象
我在NodeJS中做一些工作,需要比较不同数组中的对象以获得重复的属性 例如: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
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);
此解决方案不返回重复数组,只返回引用