JavaScript如何替换数组中所有指定相同数字为目标数值
JavaScript 数组指定元素替换的简洁实现方案
需求:将数组
[2,1,5,6,1,9,1]中所有值为1的元素统一替换为0,最终得到结果[2,0,5,6,0,9,0]。除了手写for循环加判断的写法外,有几个更简洁、语义更清晰的实现方式,按推荐优先级排列:
方法1:
Array.prototype.map(首选,无副作用)
这是这类等长数组转换场景最通用的方案,map会遍历原数组每一项,根据回调的返回值生成全新数组,完全不会改动原数组,代码可以写得非常简洁:const originArr = [2,1,5,6,1,9,1]; const result = originArr.map(item => item === 1 ? 0 : item);提醒一句,别为了省代码写
item => item || 0这种取巧的隐式转换写法,这会把所有假值(0、false、空字符串等)全替换成0,结果不符合预期,踩这个坑的人不少。方法2:
Array.prototype.forEach(适合需要原地修改原数组的场景)
如果你不需要保留原数组,想直接在原数组上改,用forEach遍历索引赋值就行,比写for循环省掉了维护计数器、判断循环边界的步骤:const arr = [2,1,5,6,1,9,1]; arr.forEach((val, index) => { if (val === 1) arr[index] = 0; });方法3:
Array.prototype.reduce(适合叠加其他处理逻辑的场景)
如果你在替换元素的同时还要做其他统计、聚合操作(比如统计一共替换了多少个元素),用reduce一次遍历就能搞定,不需要循环多次:const originArr = [2,1,5,6,1,9,1]; let replaceCount = 0; const result = originArr.reduce((acc, cur) => { const targetVal = cur === 1 ? 0 : cur; if (cur === 1) replaceCount++; acc.push(targetVal); return acc; }, []); // 最终result是目标数组,replaceCount的值为3,即一共替换了3个1
和手写for循环比,这几个数组内置方法的语义化更强,其他开发者看到方法名就能快速判断代码意图,少写很多样板代码,也不容易出现循环边界写错、计数器漏加这类低级错误。
内容的提问来源于stack exchange,提问作者Anish Kulshreshtha
相关产品推荐
相关产品推荐

