如何将指定格式的JavaScript对象转换为目标嵌套结构?
数组对象结构转换实现方案
需求说明
将原数据中segment_names字段的字符串数组,转换为包含name(原字符串值)和连续自增id的对象数组,id从1开始递增。
原始数据结构
[ { "major_segment": "A", "minor_segments": [ { "segment_names": [ "A11", "A12", "A13", "A14" ], "minor_segment_name": "List1" }, { "segment_names": [ "A21", "A22", "A23", "A24" ], "minor_segment_name": "List2" } ] }, { "major_segment": "B", "minor_segments": [ { "segment_names": [ "B11", "B12", "B13" ], "minor_segment_name": "List3" }, { "segment_names": [ "B21", "B22", "B23" ], "minor_segment_name": "List4" } ] } ]
目标数据结构
const myObj = [ { "major_segment": "A", "minor_segments": [ { "segment_names": [ { "name":"A11", id:1}, { "name":"A12", id:2}, { "name":"A13", id:3}, { "name":"A14", id:4} ], "minor_segment_name": "List1" }, { "segment_names": [ { "name":"A21",id:5}, { "name":"A22",id:6}, { "name":"A23",id:7}, { "name":"A24",id:8} ], "minor_segment_name": "List2" } ] }, { "major_segment": "B", "minor_segments": [ { "segment_names": [ { "name":"B11",id:9}, { "name":"B12",id:10}, { "name":"B13",id:11} ], "minor_segment_name": "List3" }, { "segment_names": [ { "name":"B21",id:12}, { "name":"B22",id:13}, { "name":"B23",id:14} ], "minor_segment_name": "List4" } ] } ]
实现代码(JavaScript)
// 原始数据 const originalData = [ { "major_segment": "A", "minor_segments": [ { "segment_names": ["A11", "A12", "A13", "A14"], "minor_segment_name": "List1" }, { "segment_names": ["A21", "A22", "A23", "A24"], "minor_segment_name": "List2" } ] }, { "major_segment": "B", "minor_segments": [ { "segment_names": ["B11", "B12", "B13"], "minor_segment_name": "List3" }, { "segment_names": ["B21", "B22", "B23"], "minor_segment_name": "List4" } ] } ]; // 初始化自增ID计数器 let idCounter = 1; // 转换逻辑 const myObj = originalData.map(major => { return { ...major, minor_segments: major.minor_segments.map(minor => { return { ...minor, segment_names: minor.segment_names.map(name => { return { name, id: idCounter++ }; }) }; }) }; }); console.log(myObj);
代码说明
- 采用
map方法逐层遍历数据结构,不修改原始数据,保持纯函数式处理逻辑 - 通过全局计数器
idCounter确保id从1开始连续递增 - 解构原对象保留所有原有字段,仅替换
segment_names的结构
内容的提问来源于stack exchange,提问作者User_16647160
相关产品推荐
相关产品推荐

