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

如何新增键值重构JSON对象,在Angular中实现API数据结构转换

问题排查与解决

现有代码的问题点

  • 遍历过程中直接覆盖_newPickLists对象:每次循环都给this._newPickLists赋值为仅包含当前键的新对象,最终只会保留最后一个遍历到的Demo-2属性,丢失之前的Demo-1内容
  • 动态键语法错误:对象中使用变量作为键需要包裹方括号,原代码直接写items[0]会被识别为固定字符串键,不会解析为变量值
  • 属性值不符合要求:mode、status写死为固定值,没有匹配不同键的对应配置,同时未处理Demo-1下sku字段的替换需求
  • map方法使用不当:map是用来生成新数组的,单纯遍历对象用forEach更合适,避免不必要的数组创建

修正后的实现代码

// 初始化空结果对象
this._newPickLists = {};
// 定义不同键对应的配置项,可按需扩展
const keyConfig = {
  'Demo-1': { mode: 'Veri', status: 'open' },
  'Demo-2': { mode: 'Clear', status: 'Closed' }
};

Object.entries(_data).forEach(([key, skuList]) => {
  // 处理Demo-1下的sku替换逻辑,将Pepsi Cans改为Pepsi
  const processedList = key === 'Demo-1' 
    ? skuList.map(item => ({
        ...item,
        sku: item.sku === 'Pepsi Cans' ? 'Pepsi' : item.sku
      }))
    : skuList;

  // 动态添加属性到结果对象
  this._newPickLists[key] = {
    items: processedList,
    ...keyConfig[key]
  }
})

代码说明

  • 提前初始化空的结果对象,遍历过程中新增属性而非覆盖整个对象
  • 使用解构语法直接获取键名key和对应数组skuList,代码可读性更高
  • 单独封装不同键的配置项,后续修改无需改动遍历逻辑,可维护性更强
  • 单独处理Demo-1下的sku字段替换逻辑,完全匹配预期输出要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:18:03