JavaScript中使用forEach遍历数组为何无法修改原数组元素?
问题原因
- 你数组里存储的是数字这类基本数据类型,
forEach回调的第一个参数ele只是原数组对应位置值的拷贝,修改这个临时变量完全不会影响原数组的实际存储内容。 - 你写的
ele * 2只做了计算,没有把运算结果回写到原数组,运算完的结果直接被丢弃,自然不会产生任何效果。
实现方案
方案1:通过forEach修改原数组
如果需要直接改动原数组,可以使用forEach回调的另外两个可选参数:当前元素索引、正在遍历的原数组,通过索引直接修改原数组对应位置的值:
let array = [1, 2, 3, 4]; array.forEach((ele, index, originArr) => { originArr[index] = ele * 2; }); console.log(array); // 输出 [2, 4, 6, 8]
方案2:用map生成新数组(更推荐)
如果不需要改动原数组,只是要得到处理后的新数组,更适合用map方法,符合不可变开发习惯,可读性和可维护性更好:
let array = [1, 2, 3, 4]; const doubledArray = array.map(ele => ele * 2); console.log(array); // 原数组保持不变:[1, 2, 3, 4] console.log(doubledArray); // 处理后的新数组:[2, 4, 6, 8]
内容的提问来源于stack exchange,提问作者Manas Dixit
相关产品推荐
相关产品推荐

