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

如何按数据类型过滤数组并拆分出字符串与数值数组?

嘿,这个拆分数组的需求很容易实现,用JavaScript的数组方法或者手动遍历都能搞定,刚好匹配你要的结果~

方法一:使用Array.filter()(简洁高效)

这是最常用的方式,利用数组的filter方法快速筛选出对应类型的元素:

var arr = ["three", "2", "five", "ten", "111", 1, 2, "forty", "33", 33];

// 筛选严格数值类型的元素(仅原始number类型,字符串形式的数字不算)
var numArr = arr.filter(item => typeof item === 'number');

// 筛选字符串类型的元素
var strArr = arr.filter(item => typeof item === 'string');

console.log(numArr); // 输出: [1, 2, 33]
console.log(strArr); // 输出: ["three", "2", "five", "ten", "111","forty", "33"]

原理说明

filter方法会遍历原数组,对每个元素执行回调函数:

  • 当回调返回true时,该元素会被保留到新数组中
  • typeof item === 'number'能精准判断元素是否为原始数值类型,完美匹配你给出的numArr示例
  • typeof item === 'string'则会筛选出所有字符串类型的元素,包括那些看起来像数字的字符串(比如"2"、"33")
方法二:手动遍历数组(适合新手理解底层逻辑)

如果你想更清楚地看到每一步的处理过程,可以用for循环手动遍历分类:

var arr = ["three", "2", "five", "ten", "111", 1, 2, "forty", "33", 33];
var numArr = [];
var strArr = [];

// 遍历原数组的每个元素
for (let i = 0; i < arr.length; i++) {
  const currentItem = arr[i];
  // 判断元素类型,分别推入对应数组
  if (typeof currentItem === 'number') {
    numArr.push(currentItem);
  } else if (typeof currentItem === 'string') {
    strArr.push(currentItem);
  }
  // 要是数组里还有其他类型(比如null、布尔值),可以在这里加else分支处理
}

console.log(numArr); // 输出: [1, 2, 33]
console.log(strArr); // 输出: ["three", "2", "five", "ten", "111","forty", "33"]

额外注意

如果之后你有需求要把字符串形式的数字(比如"2"、"111")转换成数值加入numArr,可以额外加判断逻辑,但根据你给出的示例,当前的代码已经完全满足要求啦~

内容的提问来源于stack exchange,提问作者user9235101

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:47:05