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

如何解决嵌套循环匹配对象数组时重复生成结果的问题

解决数组关联时生成重复对象的问题

我完全懂你遇到的麻烦——之前用嵌套循环的时候,每次温度数组里的time不匹配就往结果里推一个对象,导致同一个事件出现好多次重复条目对吧?咱们换个更高效也更简洁的思路,就能轻松解决这个问题。

优化后的解决方案

核心思路是先把温度数组转换成以time为键的映射表,这样查找每个事件对应的温度时,不用再嵌套循环,而且每个事件只需要处理一次,自然就不会有重复了。

function getDataToDisplay(testArr1, testArr2) {
  // 将温度数组转换为 time -> temp 的映射,实现O(1)快速查找
  const tempLookup = testArr2.reduce((acc, current) => {
    acc[current.time] = current.temp;
    return acc;
  }, {});

  // 遍历事件数组,每个事件仅生成一个结果对象
  return testArr1.map(event => {
    const matchedTemp = tempLookup[event.time];
    return {
      event: event.event,
      time: event.time,
      temp: matchedTemp !== undefined ? matchedTemp : "no matching data found"
    };
  });
}

为什么这个方法能解决问题?

  1. 避免嵌套循环的重复操作:
    之前的嵌套循环会让每个事件和温度数组的每一项做对比,只要不匹配就推一次对象,导致同一个事件被多次添加到结果里。现在我们先把温度数据转成映射表,每个事件只需要查一次映射表,生成一个对象。
  2. 效率更高:
    原来的嵌套循环时间复杂度是O(n*m)(n是事件数,m是温度条目数),现在转换成映射表是O(m),遍历事件是O(n),整体复杂度降到O(n+m),数据量越大优势越明显。
  3. 逻辑更清晰:
    代码分成两步:先做数据预处理,再生成结果,每一步的职责明确,也更容易维护。

测试验证

用你提供的测试数组调用这个函数,会得到完全符合预期的结果:

const testArr1 = [ { event: "Ryan's birthday", time: "4:00", }, { event: "Steves's birthday", time: "2:00", }, { event: "Helen's birthday", time: "1:00", }, { event: "Paola's birthday", time: "3:00", }, { event: "Jared's birthday", time: "9:00", }, ];
const testArr2 = [ { time: "4:00", temp: 41, }, { time: "6:00", temp: 42, }, { time: "8:00", temp: 43, }, { time: "1:00", temp: 44, }, { time: "3:00", temp: 45, }, { time: "9:00", temp: 46, }, ];

console.log(getDataToDisplay(testArr1, testArr2));

输出结果:

[
  { event: "Ryan's birthday", time: "4:00", temp: 41 },
  { event: "Steves's birthday", time: "2:00", temp: "no matching data found" },
  { event: "Helen's birthday", time: "1:00", temp: 44 },
  { event: "Paola's birthday", time: "3:00", temp: 45 },
  { event: "Jared's birthday", time: "9:00", temp: 46 }
]

每个事件只出现一次,匹配成功的显示对应温度,匹配失败的正确标记为"no matching data found"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 13:12:34