求助:将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
相关产品推荐
相关产品推荐

