javascript - 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;
        }
      })
    })
  })

 

第 1 个答案:

外层的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)))

 

第 2 个答案:

想用 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]))
})

javascript - 如何在react中移除addEventListener?:做了一个监听下拉框右键事件阻止了默认事件,如何将这个addEventListener移除呢?