如何按数据类型过滤数组并拆分出字符串与数值数组?
嘿,这个拆分数组的需求很容易实现,用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
相关产品推荐
相关产品推荐

