JavaScript自定义forEach执行后目标数组未更新的问题咨询
问题解决:自定义forEach无法更新原数组
问题原因
你的自定义forEach函数没有对原数组执行修改操作:
- 调用
callback(array[i])时,只是计算出元素的平方值,但没有将结果赋值回原数组的对应位置。由于数字是基本类型,传递给回调的是值的副本,修改副本不会影响原数组的元素。 - 函数内部的
newArray变量完全未被使用,也未与原数组建立关联,因此原数组始终保持初始值。
修正方案
修改forEach函数,在遍历过程中将回调处理后的结果赋值回原数组的对应索引位置,直接更新原数组:
// 平方函数保持不变 const square = a => a * a; // 修正后的自定义forEach function forEach(array, callback) { for (let i = 0; i < array.length; i++) { // 将回调结果赋值回原数组,实现更新 array[i] = callback(array[i]); } } var myarray = [10,20]; forEach(myarray, square); console.log(myarray); // 输出 [100, 400]
补充说明
原生JavaScript的forEach方法默认也不会修改原数组,若用原生方法实现同样效果,需在回调里主动修改原数组元素:
myarray.forEach((item, index) => { myarray[index] = square(item); });
内容的提问来源于stack exchange,提问作者Tito Garcia
相关产品推荐
相关产品推荐

