NodeJS中如何找出不同数组中ID属性相同的对象?
找出两个数组中ID存在交集的对象(以Fridge数组的匹配项为准)
嘿,这个需求其实挺常见的,我给你两种实用的Node.js实现方案,刚好能得到你想要的结果:
方法一:用Set优化查询效率(推荐)
当数组元素比较多的时候,这种方法的性能会好很多,因为*Set的查询操作是O(1)*的,比反复遍历数组快得多:
const Items = [{"id": "10", "name": "milk"},{"id":"7", "name": "banana"},{"id":"47", "name": "cheese"},{"id":"6", "name":"carrot"}]; const Fridge = [{"id":"19", "name": "cheese"},{"id": "10", "name": "milk"},{"id":"43","name": "egg"}, {"id":"6", "name":"not a carrot"}]; // 先把Items数组里所有对象的id提取出来,存到Set里 const itemIdSet = new Set(Items.map(item => item.id)); // 过滤Fridge数组,只保留id在Set里的对象 const Output = Fridge.filter(fridgeItem => itemIdSet.has(fridgeItem.id)); console.log(Output); // 输出:[{"id": "10", "name": "milk"},{"id":"6", "name":"not a carrot"}]
方法二:直接遍历判断(适合小数据量)
如果你的数组元素不多,也可以用更直观的写法,虽然性能不如Set,但代码简单易懂:
const Output = Fridge.filter(fridgeItem => // 检查当前Fridge对象的id是否在Items数组里存在 Items.some(item => item.id === fridgeItem.id) );
补充说明
你示例里的cheese没出现在结果里是因为两个数组中cheese的id不一样哦——Items里的cheese id是47,而Fridge里的是19,所以不符合“id同时存在”的条件,这和你给出的预期输出是一致的。
内容的提问来源于stack exchange,提问作者leumasme
相关产品推荐
相关产品推荐

