You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用map/filter/reduce找出嵌套数组所有子数组共有的对象属性

找出嵌套数组内层子数组共有的对象属性(函数式实现)

需求说明

从给定的嵌套数组emptyRooms中,筛选出所有内层子数组都包含的对象属性,采用map/filter/reduce等函数式数组方法实现,且方案具备动态适应性。

实现思路

  1. 提取属性集合:将每个内层子数组转换为属性名的集合(Set),利用Set的快速查找特性提升效率;
  2. 计算集合交集:以第一个子数组的属性集合为基础,通过reduce遍历后续所有集合,逐步求交集,最终得到所有子数组共有的属性。

代码实现

const emptyRooms = [
    [{"kitchen": false}, {"ballroom": false}, {"billiard room": false}],
    [{"ballroom": false}, {"conservatory": false}, {"dining room": false}, {"library": false}],
    [{"kitchen": false}, {"ballroom": false}, {"dining room": false}, {"library": false}],
    [{"ballroom": false}, {"conservatory": false}, {"billiard room": false}, {"library": false}]
];

// 1. 转换每个内层子数组为属性集合
const roomPropertySets = emptyRooms.map(subArray => 
    new Set(subArray.map(item => Object.keys(item)[0]))
);

// 2. 计算所有集合的交集
const commonProperties = [...roomPropertySets.reduce((currentIntersection, nextSet) => {
    return new Set([...currentIntersection].filter(prop => nextSet.has(prop)));
}, roomPropertySets[0])];

console.log(commonProperties); // 输出: ['ballroom']

动态适配说明

如果内层对象可能包含多个属性,只需调整属性提取逻辑即可兼容:

// 处理多属性对象的情况:提取所有属性并去重
const roomPropertySets = emptyRooms.map(subArray => 
    new Set(subArray.flatMap(item => Object.keys(item)))
);

该方案无需修改核心逻辑,就能适配任意数量的外层子数组、任意长度的内层子数组,以及单/多属性的对象结构。

内容的提问来源于stack exchange,提问作者peberino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 17:37:03