JavaScript数组处理:移除3/4位元素末尾两位,保留1/2位元素
按规则处理数组中的数字元素
问题描述
给定数组:
var test = [2, 45, 567, 3, 6754];
需要实现:
- 元素为1位或2位数字时,保持不变
- 元素为3位或4位数字时,移除末尾两位
期望输出:
[2, 45, 5, 3, 67];
原代码问题分析
你之前的代码:
test.forEach(function(element, index) { test[index] = element.slice(1, -2); });
存在两个核心问题:
- 数字类型本身没有
slice方法,JS会隐式把数字转成字符串再调用,这不是规范的处理方式 - 对于长度小于3的字符串(比如1位数字转成的
"2"),slice(1, -2)会返回空字符串——因为起始索引大于结束索引,导致元素被替换成空值
解决方案
方法一:字符串处理+map遍历
这种方法逻辑直观,通过字符串长度判断处理规则:
var test = [2, 45, 567, 3, 6754]; var result = test.map(num => { const numStr = num.toString(); // 判断是否为3位或4位数字 if (numStr.length >= 3 && numStr.length <= 4) { // 截取除最后两位外的部分,转成数字返回 return parseInt(numStr.slice(0, -2), 10); } // 1/2位数字直接返回原数 return num; }); console.log(result); // 输出 [2, 45, 5, 3, 67]
方法二:数学运算+map遍历
如果不想转字符串,可以通过数值范围判断,结合除法取整实现:
var test = [2, 45, 567, 3, 6754]; var result = test.map(num => { // 3位数字范围是100-999,4位是1000-9999 if (num >= 100 && num <= 9999) { // 除以100后取整,等价于去掉末尾两位 return Math.floor(num / 100); } return num; }); console.log(result); // 输出 [2, 45, 5, 3, 67]
注意:推荐用
map方法生成新数组,而非forEach直接修改原数组,这样更符合函数式编程规范,也能避免意外修改原始数据。
内容的提问来源于stack exchange,提问作者Anvita Rastogi
相关产品推荐
相关产品推荐

