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

如何将JSON数组转为指定键值对对象?JS报错求助

问题:将数组转换为指定键值对对象

原始对象:

const order = 
{
    requests: [
        { code: 'T1', id: '123', requestStatus: 'request' },
        { code: 'T2', id: '321', requestStatus: 'request' }
    ]
};

期望得到的结构:

const ids = {
    '123': 'T1',
    '321': 'T2'
};

尝试的代码及报错:

let id = order['requests'].map((r) => [r.code] = r.id);

console.log(ids['123'] == 'T1');
console.log(ids['321'] == 'T2');

报错信息:object null is not iterable (cannot read property Symbol(Symbol.iterator))


错误原因

  1. 变量名不匹配:声明的变量是id,但后续调用的是ids,导致ids未定义。
  2. map方法用法错误:map返回数组,而你需要的是对象;另外[r.code] = r.id的解构写法不成立——r.id是字符串,无法解构到数组中,这才触发了迭代器相关报错。

正确实现方式

要把数组转换为指定结构的对象,用reduce方法最直接:

const order = 
{
    requests: [
        { code: 'T1', id: '123', requestStatus: 'request' },
        { code: 'T2', id: '321', requestStatus: 'request' }
    ]
};

// 用reduce遍历数组,逐步构建目标对象
const ids = order.requests.reduce((acc, item) => {
    acc[item.id] = item.code;
    return acc;
}, {}); // 初始值为空对象

console.log(ids['123'] === 'T1'); // true
console.log(ids['321'] === 'T2'); // true

代码解释

  • reduce接收两个参数:回调函数和初始值(这里是空对象{})。
  • 回调函数中的acc是累计构建的对象,每次遍历把当前item的id作为键、code作为值添加到acc中,最后返回acc。
  • 遍历完成后,acc就是你需要的ids对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 02:45:05