JavaScript 处理数字数组中大于9的元素减9操作代码不生效问题
JavaScript数组元素处理问题解决方案
问题根因
Array.prototype.forEach() 方法本身无返回值,且回调函数中的return语句仅会终止当前次循环,不会把计算结果存入原数组,你计算出的evenSums - 9没有被存储到任何变量/位置,因此代码无报错但没有实际效果。
正确实现方式
方式1:使用map方法(推荐,不修改原数组)
map方法会遍历数组所有元素,将每次回调函数的返回值组合为新数组返回,你之前用map未生效大概率是没有接收返回的新数组:
const evenSum = [4, 4, 0, 12, 0, 10, 2, 8]; // 接收处理后的新数组 const processedEvenSum = evenSum.map(item => { return item > 9 ? item - 9 : item; }); // 如果需要覆盖原数组,可以直接赋值 evenSum = processedEvenSum
方式2:使用forEach修改原数组
借助forEach回调的索引参数直接修改原数组对应位置的值:
const evenSum = [4, 4, 0, 12, 0, 10, 2, 8]; evenSum.forEach((item, index, originArr) => { if(item > 9) { originArr[index] = item - 9; } });
方式3:使用for循环修改原数组
const evenSum = [4, 4, 0, 12, 0, 10, 2, 8]; for(let i = 0; i < evenSum.length; i++) { if(evenSum[i] > 9) { evenSum[i] -= 9; } }
以上三种方式运行后,最终处理结果均为 [4, 4, 0, 3, 0, 1, 2, 8]。
内容的提问来源于stack exchange,提问作者seth8656
相关产品推荐
相关产品推荐

