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移除呢?