如何将JavaScript嵌套Object转换为指定格式的简单Array数组
最优实现方案
这个场景适合用flatMap处理嵌套数组的展开转换,实现代码如下:
const transform = (data) => { return data.model_A.flatMap(article => { // 提取前三个公共字段 const commonFields = [ article.col_1, article.col_2, article.model_B.col_3 ] // 存在标签数组时按标签数量生成对应行数 if (Array.isArray(article.model_C) && article.model_C.length > 0) { return article.model_C.map(tag => [ ...commonFields, tag.col_4, tag.col_5 ]) } // 无标签时生成默认空值行 return [[...commonFields, '', '']] }) } // 调用方式 const expectedData = transform(data)
方案优势
- 时间复杂度为O(N),仅遍历所有有效数据一次,性能最优
- 逻辑分层清晰,公共字段提取和标签分支处理分离,后续字段调整维护成本低
- 兼容边界场景:如果
model_C不存在、为空数组时,会自动填充空字符串,符合输出要求 - 代码语义化强,
flatMap天生适配「一个输入项对应多个输出项」的转换场景,比手动拼接数组的写法可读性更高
旧环境兼容方案
如果需要兼容不支持flatMap的低版本JS环境,可以替换为map + concat的写法:
const transform = (data) => { return [].concat(...data.model_A.map(article => { const commonFields = [article.col_1, article.col_2, article.model_B.col_3] if (Array.isArray(article.model_C) && article.model_C.length) { return article.model_C.map(tag => [...commonFields, tag.col_4, tag.col_5]) } return [[...commonFields, '', '']] })) }
内容的提问来源于stack exchange,提问作者Driiich
相关产品推荐
相关产品推荐

