使用JavaScript map方法格式化对象数组 按序提取父子节点指定字段
对象结构格式化实现方案
你可以通过数组遍历的方式完成结构转换,核心逻辑是遍历接口返回的原始数组,每处理一条数据先插入格式化后的父节点,再遍历该条数据下的所有子节点逐个格式化插入,全程保留要求的空字段即可。
实现代码
/** * 格式化接口返回的父子结构数据 * @param {Array} sourceArr 接口返回的原始数组 * @returns {Array} 格式化后的目标结构数组 */ function formatData(sourceArr) { return sourceArr.reduce((result, currentItem) => { // 构造父节点格式化对象 const parentNode = { recNum: currentItem.parent.recnum, prtNme: currentItem.parent.prtnme, date: '', locNum: '', locDescription: '', lotSerNum: '', byTrans: '', running: currentItem.parent.qtyohn, unitCost: '', extCost: '' }; result.push(parentNode); // 遍历构造所有子节点格式化对象 currentItem.children.forEach(child => { const childNode = { recNum: '', prtNme: '', date: '', locNum: child.location?.number ?? '', locDescription: child.location?.description ?? '', lotSerNum: '', byTrans: '', running: child.qtyohn, unitCost: '', extCost: '' }; result.push(childNode); }); return result; }, []); } // 调用方式:传入接口返回的原始数组即可得到目标结果 const targetData = formatData(apiRawData);
说明
- 代码中使用了可选链和空值合并运算符做兼容处理,若个别子节点的
location字段为空,会自动填充空字符串,不会抛出运行时错误 - 所有要求保留的空字段均完整保留,后续需要填充数据时直接修改对应字段即可
- 输出顺序严格遵循「父节点在前,其下所有子节点按原顺序依次排列」的要求,和你需要的输出规则完全匹配
内容的提问来源于stack exchange,提问作者Jayden
相关产品推荐
相关产品推荐

