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

如何提取嵌套JavaScript对象中的所有name值并返回一维数组?

提取嵌套对象中所有name值为一维数组的解决方案

嘿,我来帮你搞定这个问题!你当前的代码返回嵌套数组,核心原因是递归调用toArray(value)得到子数组后,你直接用push把整个子数组塞进结果里了,导致数组一层套一层。咱们只需要调整递归时的数组合并方式,再加上精准的属性判断,就能得到想要的一维数组。

方法一:修改原递归函数

直接调整你现有的toArray函数,做两个关键改动:

  1. 递归处理子对象时,用展开运算符...把递归返回的子数组元素展开后添加到结果,避免嵌套;
  2. 只提取name属性的值,确保不会混入其他属性内容(更严谨)。

修改后的代码如下:

function toArray(obj) {
  const result = [];
  for (const prop in obj) {
    const value = obj[prop];
    // 注意要排除null,因为typeof null也会返回'object'
    if (typeof value === 'object' && value !== null) {
      // 展开递归得到的数组,把元素逐个push进去
      result.push(...toArray(value));
    } else if (prop === 'name') {
      result.push(value);
    }
  }
  return result;
}

function nameMatrioska(target) {
  return toArray(target);
}

方法二:针对固定结构的简化写法

如果你的对象结构固定(每个节点只有name和daughter属性),可以写更直观的递归函数:

function nameMatrioska(obj) {
  const names = [];
  // 先把当前节点的name加进去
  if (obj.name) {
    names.push(obj.name);
  }
  // 如果有子节点daughter,递归处理并合并结果
  if (obj.daughter && typeof obj.daughter === 'object') {
    names.push(...nameMatrioska(obj.daughter));
  }
  return names;
}

测试验证

用你提供的嵌套对象测试:

const family = { name: 'grandma', daughter: { name: 'mother', daughter: { name: 'daughter', daughter: { name: 'granddaughter' } } } };
console.log(nameMatrioska(family));
// 输出:['grandma', 'mother', 'daughter', 'granddaughter']

这样就能完美得到你想要的一维数组啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:15:40