如何使用Lodash合并两个数组并重命名键,适配扁平化表格展示
实现方案
你需要先将关联数据按关联字段分组,再遍历基准数组拼接唯一键,核心实现逻辑如下:
首先修正你原有代码的几处错误:
- 遍历基准错误:需要以
BusData1为表格行基准做遍历,而非遍历OtherData2 - 字段名大小写不匹配:
OtherData2的关联字段为BusDataId,你代码中写的BusDataID无法匹配到数据 - 缺少唯一键生成逻辑:直接合并对象会出现同键名覆盖,无法生成表格需要的唯一列字段
完整Lodash实现代码
// 1. 将OtherData2按关联字段BusDataId分组,加速查找 const otherDataGroup = _.groupBy(OtherData2, 'BusDataId') // 2. 遍历BusData1生成合并后的扁平数组 const Combined = _.map(BusData1, busRow => { // 拷贝原数据避免修改原始接口返回值 const mergedRow = _.cloneDeep(busRow) // 取出当前行关联的所有OtherData2条目 const relatedRows = otherDataGroup[busRow.id] || [] // 遍历关联条目,生成唯一键并赋值 _.forEach(relatedRows, otherRow => { const uniqueKey = `BusDataId${otherRow.id}ObjRef` mergedRow[uniqueKey] = otherRow.ObjRef }) // 以下为匹配你示例效果的字段处理,不需要可删除 mergedRow.ObjRefLabel = mergedRow.ObjRefLabel.split(' - ')[1] if (relatedRows.length) { mergedRow.ObjRefDesc = relatedRows[0].ObjRefDesc } return mergedRow })
注:你给出的预期结果中id为12的条目里BusDataId31ObjRef为笔误,按原始数据关联规则,实际生成的键应为BusDataId32ObjRef,值为0。
内容的提问来源于stack exchange,提问作者McGooks
相关产品推荐
相关产品推荐

