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

如何将对象中Results数组的属性提取为原对象的数组属性?

修正对象属性重组的代码实现

需求回顾

需要将对象中Results数组内的所有属性提取到原对象中,将同属性的多个值合并为数组,最终移除Results属性。示例如下:
原始对象:

{ "Name": "John", "Results": [ { "Type": "DB", "Immediate_Action": "No" }, { "Type": "system", "Immediate_Action": "Yes" } ] }

转换后目标结构:

{ "Name": "John", "Type": ["DB","system"], "Immediate_Action": ["No","Yes"] }

现有代码问题分析

你的代码存在几个关键问题:

  • 遍历Results时,参数命名为key但实际是每个result对象,导致后续属性访问逻辑混乱
  • 错误使用entry.Results[key]访问属性值,正确方式应该直接从当前遍历的result对象取值
  • 未移除原对象中的Results属性
  • 属性赋值逻辑对应错误,没有正确遍历每个result的键值对

修正后的代码

const mapOscarResults = ({ data }) => {
  return data.map(entry => {
    // 解构entry,分离出Results和其他属性
    const { Results, ...rest } = entry;
    const mapped = { ...rest };

    // 遍历Results数组中的每个结果对象
    Results.forEach(result => {
      // 遍历当前结果对象的所有键值对
      Object.entries(result).forEach(([key, value]) => {
        // 初始化数组或追加值
        if (mapped[key]) {
          mapped[key].push(value);
        } else {
          mapped[key] = [value];
        }
      });
    });

    return mapped;
  });
};

代码解释

  1. 解构分离属性:使用对象解构把entry中的Results和其他属性分开,避免后续操作影响原属性
  2. 初始化目标对象:基于其他属性创建mapped对象,保留原对象除Results外的所有内容
  3. 遍历结果数组:逐个处理Results中的每个对象
  4. 遍历键值对合并:对每个结果对象的键值对,将值追加到mapped对应键的数组中,不存在则初始化数组
  5. 返回处理后的对象:最终返回的对象已完成属性重组,且移除了Results

测试示例

假设传入的data为:

const testData = [
  { "Name": "John", "Results": [ { "Type": "DB", "Immediate_Action": "No" }, { "Type": "system", "Immediate_Action": "Yes" } ] },
  { "Name": "Alice", "Results": [ { "Type": "API", "Immediate_Action": "No" } ] }
];

调用mapOscarResults({ data: testData })会得到:

[
  { Name: 'John', Type: [ 'DB', 'system' ], Immediate_Action: [ 'No', 'Yes' ] },
  { Name: 'Alice', Type: [ 'API' ], Immediate_Action: [ 'No' ] }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:06:32