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

求助:将JSON对象数组转换为键值映射的实现方法

问题解决:数组转按键聚合的对象

原代码问题分析

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

  • 错误使用数组arr存储结果,最终需要的是对象而非数组
  • forEach遍历原数组每个元素时,重复执行map遍历整个数组,做了大量冗余计算
  • {b:a}写法会把键固定为字符串"b",而非变量b对应的实际键名,需要用计算属性名{[b]: a}才能正确绑定键名

修正后的解法

方法1:基础遍历实现(适合新手理解)

const data = [
 {name: 'Alex', date: '05/17/2023 10:32 PM', id: '00153168', priority: '3-Medium'},
 {name: 'Peter', date: '05/17/2023 11:32 PM', id: '00153169', priority: '3-Medium'}
];

// 初始化结果对象
const result = {};
// 取第一个元素的所有键(假设所有对象结构一致)
const keys = Object.keys(data[0]);

keys.forEach(key => {
  // 遍历原数组,收集当前键对应的所有值
  result[key] = data.map(item => item[key]);
});

console.log(result);

方法2:用Array.reduce简洁实现(更高效灵活)

const data = [
 {name: 'Alex', date: '05/17/2023 10:32 PM', id: '00153168', priority: '3-Medium'},
 {name: 'Peter', date: '05/17/2023 11:32 PM', id: '00153169', priority: '3-Medium'}
];

const result = data.reduce((acc, current) => {
  Object.keys(current).forEach(key => {
    // 如果结果对象中还没有当前键,先初始化空数组
    if (!acc[key]) acc[key] = [];
    acc[key].push(current[key]);
  });
  return acc;
}, {});

console.log(result);

两种方法都能输出你预期的结果,方法2兼容性更强,即使原数组内的对象存在额外键也能自动处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:33:08