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

递归搜索嵌套对象数组并按指定键构造新数组的实现问题

解决嵌套对象数组的指定键值提取问题

原代码的问题

你之前用JSON.stringify的思路不对,而且代码里有明显错误:

  • nestedValue[a]里的a是未定义变量,应该是当前遍历的目标键
  • 逻辑上循环每个目标键时,重复把同一个foundObj推到数组里,导致结果重复且错误
  • 没有单独处理每个用户,而是直接操作整个response对象

正确实现方案

我们需要递归遍历每个用户的所有嵌套属性(包括对象和数组),收集指定键的键值对,最终生成符合要求的新数组。代码如下:

// 递归收集单个对象/数组中指定键的键值对
function collectKeys(target, keys) {
    const result = {};
    
    function traverse(item) {
        if (typeof item !== 'object' || item === null) return;
        
        // 处理数组(比如work数组)
        if (Array.isArray(item)) {
            item.forEach(traverse);
            return;
        }
        
        // 处理对象
        Object.entries(item).forEach(([key, value]) => {
            // 如果当前键是目标键,就存入结果
            if (keys.includes(key)) {
                result[key] = value;
            }
            // 递归遍历嵌套对象
            traverse(value);
        });
    }
    
    traverse(target);
    return result;
}

// 主函数:处理用户数组
function dynamic(obj, ...keyToFind) {
    // 取出users数组,遍历每个用户收集指定键
    return obj.users.map(user => collectKeys(user, keyToFind));
}

调用示例

const result = dynamic(response, 'age', 'work', 'main', 'description', 'type', 'date');
console.log(result);

输出结果

会得到你期望的数组:

[
   {
     'age': 33,
     'work': 1015,
     'main': 'Doctor',
     'description': 'Ofto',
     'type': 0.26,
     'date': '2022-08-30 15:00:00'
   },
   {
     'age': 25,
     'work': 101,
     'main': 'Software',
     'description': 'Programmer',
     'type': 5.6,
     'date': '2021-01-30 12:00:00'
   },
   {
     'age': 75,
     'work': 1,
     'main': 'Pension',
     'description': 'Architect',
     'type': 1.6,
     'date': '2020-01-30 12:00:00'
   }
]

逻辑说明

  • collectKeys函数负责递归遍历单个用户的所有属性:遇到数组就遍历数组元素,遇到对象就遍历键值对,匹配到目标键就把值存入结果对象
  • 主函数dynamic取出response里的users数组,用map遍历每个用户,调用collectKeys生成每个用户的精简对象,最终组成新数组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:01:14