JavaScript中组合使用.forEach与.map返回undefined问题求助
问题原因
Array.map()要求回调函数必须返回每一轮迭代对应的新元素值,你的代码中map的回调没有任何返回语句,因此每轮迭代默认返回undefined,最终生成全为undefined的数组。Array.forEach()的返回值固定为undefined,你在forEach回调中写的return语句仅能跳出当前次的forEach迭代,既不会终止forEach遍历,也不会把返回值传递给外层的map回调。
修复实现方案
推荐提前提取changeRows的deviceId生成Set做索引,查找效率更高,尤其在数组元素量大时优势明显:
// 提前提取所有需要修改的deviceId存入Set,单次查找时间复杂度为O(1) const changeDeviceIds = new Set(changeRows.map(row => row.deviceId)) const newAlteredData = alteredData.map(element => { return changeDeviceIds.has(element.deviceId) ? { ...element, selected: false } : element })
如果数据量很小不想额外生成Set,也可以用Array.some()做存在性判断替代forEach:
const newAlteredData = alteredData.map(element => { // 判断当前元素是否在changeRows中存在匹配项 const isNeedModify = changeRows.some(row => row.deviceId === element.deviceId) return isNeedModify ? { ...element, selected: false } : element })
内容的提问来源于stack exchange,提问作者Onyx
相关产品推荐
相关产品推荐

