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

如何从嵌套对象数组中提取所有id值?

提取嵌套对象中所有id值的最优实现

针对你给出的嵌套对象结构,之前用多层map得到了嵌套数组,想要得到一维的id数组,可以用以下几种高效方法:

方法一:链式flatMap(推荐,结构固定时使用)

flatMap相当于先执行map再对结果调用flat(1),能直接避免多层嵌套:

const ids = obj.responseArray.flatMap(item => 
  item?.accounts.flatMap(acc => 
    acc.products.map(prod => prod.id)
  )
);
// 结果:["123", "456", "987", "654"]

这种写法简洁直接,每一层的flatMap都会把当前层级的数组展平一层,最终得到一维的id数组。

方法二:先map再深层扁平化

如果你已经有了之前的map结果,可以用flat(Infinity)直接展平所有嵌套层级:

const mapped = obj.responseArray.map(item => item?.accounts.map(acc => acc.products.map(prod => prod.id)));
const ids = mapped.flat(Infinity);
// 结果:["123", "456", "987", "654"]

flat(Infinity)会无视嵌套深度,把所有子数组都展平成一维,适合不确定嵌套层数的场景。

方法三:递归提取(结构不固定时使用)

如果对象的嵌套结构可能发生变化(比如products里可能还有更深的嵌套,或者某些层级数组长度不确定),可以用递归函数遍历所有属性收集id:

function extractIds(target) {
  let ids = [];
  for (const key in target) {
    if (typeof target[key] === 'object' && target[key] !== null) {
      if (key === 'id') {
        ids.push(target[key]);
      } else {
        ids = ids.concat(extractIds(target[key]));
      }
    }
  }
  return ids;
}

const ids = extractIds(obj);
// 结果:["123", "456", "987", "654"]

这种方法通用性最强,不管对象嵌套多深,只要存在id属性就会被收集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 08:53:14