如何按指定顺序将嵌套数组转换为扁平化数组?
实现嵌套数组按指定层级顺序的扁平化转换
这种转换完全可行,以下是具体的实现方案:
输入结构分析
你的输入是一个包裹着含titles数组的对象的数组,每个title下嵌套subtitles数组,每个subtitle下又嵌套content数组。需要按titleN → subtitleN → contentN的固定顺序,将各层级对象的指定属性扁平到一个对象中,最终将该对象放入数组返回。
实现代码
const data = [ { titles: [ { id: 1, name: "Title 01", subtitles: [ { id: 2, name: "Subtitle 01", title_id: 1, content: [ { id: 3, name: "Content 01", subtitle_id: 2, }, ], }, ], }, { id: 4, name: "Title 02", subtitles: [ { id: 5, name: "Subtitle 02", title_id: 4, content: [ { id: 6, name: "Content 02", subtitle_id: 5, }, ], }, ], }, ], }, ]; function flattenData(input) { const result = {}; // 提取输入中的titles数组(输入外层是数组,取第一个元素的titles) const titles = input[0].titles; titles.forEach((title, index) => { const sequenceNum = index + 1; // 生成title项 result[`titles0${sequenceNum}`] = { name: title.name, id: title.id }; // 提取当前title下的第一个subtitle(匹配示例结构) const subtitle = title.subtitles[0]; // 生成subtitle项(保留你期望输出的`sutitles`拼写,建议规范为`subtitles`) result[`sutitles0${sequenceNum}`] = { name: subtitle.name, id: subtitle.id, title_id: subtitle.title_id }; // 提取当前subtitle下的第一个content(匹配示例结构) const content = subtitle.content[0]; // 生成content项 result[`content0${sequenceNum}`] = { id: content.id, name: content.name, subtitle_id: content.subtitle_id }; }); // 按期望结构返回包裹在数组中的扁平对象 return [result]; } const flatArr = flattenData(data); console.log(flatArr);
代码说明
- 层级遍历:先从输入中取出目标
titles数组,遍历每个title元素; - 序号生成:利用循环索引+1生成对应的序列编号(01、02...);
- 属性提取:依次将title、subtitle、content的指定属性提取出来,以
titles0N、sutitles0N、content0N为键存入结果对象; - 结构匹配:最终将扁平对象包裹在数组中,与你期望的输出结构完全一致。
扩展提示
如果你的实际场景中存在一个title对应多个subtitle、或一个subtitle对应多个content的情况,可在对应层级添加内层循环,调整键名的编号规则即可适配。
内容的提问来源于stack exchange,提问作者reactchel
相关产品推荐
相关产品推荐

