You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据子数组数据与长度重映射父级数据结构并修正结果?

问题解答

核心结论

  1. 重映射父级结构完全可行,前端无需后端修改数组结构即可实现需求;
  2. 当前数组结构合理,子数组无id字段不影响处理,可通过value等关联字段完成匹配;
  3. 现有代码逻辑存在两处关键错误,修正后即可得到目标输出。

错误分析

  1. 去重逻辑偏差:通过value去重时,原数据中存在两个value=8100的子项,现有逻辑会保留第一个遇到的项,无法关联到你期望保留的第三个子项(bid:15000);
  2. 父级与子项关联错误:最后一步用obj.bid[index]取值是逻辑错误——newArrays中的元素是父级对象,index是新数组的索引,和父级内部bid数组的索引没有对应关系,导致出现undefined。

修正后的代码

this.arrays = [
  {
    id: '1',
    idbid: '0000000001618',
    name: 'ebi',
    rate: '400',
    bid: [
      { bid: 10000, date: '2022/12/12', value: 5000 },
      { bid: 10000, date: '2022/12/14', value: 8100 },
      { bid: 15000, date: '2022/12/15', value: 8100 },
    ],
  },
  {
    id: '2',
    idbid: '0000000001618',
    name: 'bio',
    rate: '100',
    bid: [{ bid: 8000, date: '2022/12/13', value: 8000 }],
  },
];

// 扁平化所有子项并关联父级数据
const flatBids = this.arrays.flatMap(parent => 
  parent.bid.map(child => ({ ...parent, ...child }))
);

// 按value去重,保留最后一个出现的项(匹配期望输出)
const uniqueBids = Array.from(
  new Map(flatBids.map(item => [item.value, item])).values()
);

// 重映射为目标结构
const remapArrays = uniqueBids.map((item, index) => ({
  id: String(index + 1),
  idbid: item.idbid,
  name: item.name,
  rate: item.rate,
  bid: item.bid,
  date: item.date,
  value: item.value,
}));

console.log(remapArrays);

代码说明

  1. 扁平化关联:用flatMap将每个父级对象与子项合并,生成包含完整父级+子项数据的扁平数组;
  2. 正确去重:使用Map按value作为key存储数据,自动覆盖重复key,保留最后一个出现的项(匹配你期望的value=8100对应bid:15000的需求);
  3. 结构重映射:直接从合并后的对象中提取字段,避免索引不匹配的问题。

运行修正后的代码即可得到你期望的输出结果。

内容的提问来源于stack exchange,提问作者Alkim Al

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 00:20:30