JS foreach双重循环如何优化?

新手上路,请多包涵
  curSelectData.forEach(e => {
    curData.forEach(v => {
      v.cityList.forEach(s => {
        if (Number(s.id) === Number(e.id)) {
          s.bid_price = e.bid_price;
        }
      })
    })
  })
阅读 3.1k
2 个回答

外层的forEach不必要,只是为了判断是否交集可以做一个映射

const map = curSelectData.reduce((res, e) => (res[e.id] = v, res),{})
curData.forEach(v => v.cityList.forEach(s => s.id in map && (s.bid_price = map[s.id].bid_price)))

想用 curSelectData 中的数据来更新所有对应的 city 的数据对吗

可以先建 id 到更新数据的映射,再遍历所有 city,通过 city.id 获取到更新数据直接赋值即可。假如没有 city.id 对应的更新数据,则 updated[city.id]undefined,此时 Object.assign 不会有任何效果,无需额外判断

const updated = Object.fromEntries(
  curSelectData.map(({ id, bid_price }) => [id, { bid_price }])
)
curData.forEach(({ cityList }) => {
  cityList.forEach(city => Object.assign(city, updated[city.id]))
})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题