如何新增键值重构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
相关产品推荐
相关产品推荐

