You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 20:15:14