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

如何从对象数组中提取嵌套属性b的唯一键并转为一维数组?

如何从对象数组中提取嵌套对象的唯一键列表?

嘿,我来帮你搞定这个问题!你现在的情况是有一个包含嵌套对象的数组,想要提取所有b属性里的唯一键,但用map得到的是二维数组,对吧?

先再明确下你的输入和目标:
你的输入数组:

[ { "a":"alpha", "b":{ "x":true, "y":true } }, { "a":"beta", "b":{ "x":true, "z":true } } ]

期望输出:["x", "y", "z"]

你之前用的代码:

const mykeys = myArray.map(item => Object.keys(item.b))

得到的是[["x","y"], ["x","z"]],这是因为map会为数组每个元素返回一个新数组,所以最终是嵌套结构。下面给你两种简单的解决办法:

方法一:扁平化数组后去重(简洁直观)

我们可以先把嵌套数组“拍平”成一维,再利用Set的唯一性去重,最后转成普通数组:

const myArray = [ { "a":"alpha", "b":{ "x":true, "y":true } }, { "a":"beta", "b":{ "x":true, "z":true } } ];
const mykeys = [...new Set(myArray.map(item => Object.keys(item.b)).flat())];
console.log(mykeys); // 输出 ["x", "y", "z"]

拆解下步骤:

  1. myArray.map(item => Object.keys(item.b)):和你之前的代码一样,得到二维数组[["x","y"], ["x","z"]]
  2. .flat():把二维数组转换为一维数组["x","y","x","z"]
  3. new Set(...):创建Set对象自动过滤重复的x,得到Set {"x", "y", "z"}
  4. [...Set]:通过展开运算符把Set转回普通数组

方法二:用reduce一步处理(性能更优)

如果你的数组数据量比较大,上面的方法会先生成一个包含重复元素的一维数组,再去重,有点多余。用reduce可以在遍历过程中直接收集唯一键,效率更高:

const myArray = [ { "a":"alpha", "b":{ "x":true, "y":true } }, { "a":"beta", "b":{ "x":true, "z":true } } ];
const mykeys = [...myArray.reduce((acc, item) => {
  // 遍历当前item.b的所有键,添加到Set里
  Object.keys(item.b).forEach(key => acc.add(key));
  return acc;
}, new Set())]; // 初始值是一个空Set,用来存唯一键
console.log(mykeys); // 输出 ["x", "y", "z"]

这个方法只需要遍历数组一次,同时利用Set自动去重的特性,避免了额外的数组扁平化操作,在大数据量下表现更好。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:36:30