为何基于比较的替换在forEach循环中不生效?
为什么forEach修改元素没生效?
你的forEach用法确实有问题,核心原因是:forEach回调里的element是数组当前元素的「值拷贝」(针对数字、字符串这类基本类型),不是原数组元素的引用。你在回调里修改element或者返回新值,根本不会影响原数组里的实际元素。
要修改原数组,得借助forEach回调的第二个参数(元素的索引),直接操作原数组的对应位置:
const array1 = [1, 2, 3]; array1.forEach((element, index) => { array1[index] = element < 2 ? 0 : element; }); console.log(array1); // 输出 [0, 2, 3]
如果是对象这类引用类型,修改element的属性会生效(因为此时element是对象的引用),但如果要替换整个对象,同样得通过索引操作原数组。但对于数字这种基本类型,只能用索引直接修改原数组的对应位置才能生效。
内容的提问来源于stack exchange,提问作者Nikhat
相关产品推荐
相关产品推荐

