我想遍历数字和字母数组,只提取数字。我尝试使用typeof运算符,但我的代码似乎不起作用
str = "55abcdef6ghij78"
function NumberAddition(str) {
var numArr = [];
str = str.split("");
for (var i = 0; i < str.length; i++) {
if (typeof str[i] === 'number') {
numArr.push(str[i]);
}
return numArr;
}
}
如果只需要数字,那么有很多方法可以做到。但最简单的方法是使用RegEx,
console.log("55abcdef6ghij78".match(/\d+/g).join(""));
// 55678
这会找到字符串中所有连续的数字(一个或多个数字),并将它们作为数组返回,然后我们最终将所有内容连接在一起以得到一个字符串。
如果您希望所有数字都是数组中的单独元素,则可以对RegEx进行一些调整,如下所示
console.log("55abcdef6ghij78".match(/\d/g));
// [ '5', '5', '6', '7', '8' ]
如果您希望按照评论中的要求对数字进行分组,那么就不要加入它们
console.log("55abcdef6ghij78".match(/\d+/g));
// [ '55', '6', '78' ]
如果您希望在将它们分组后立即将它们转换为数字,则可以map
使结果数组Number
起作用,如下所示
console.log("55abcdef6ghij78".match(/\d+/g).map(Number));
// [ 55, 6, 78 ]
除此之外,如果您要修复程序,则有两个主要错误。
typeof str[i] === 'number'
。
中的元素str
将仅是字符串类型。因此,它们将永远不等于number
。要解决此问题,您可以使用经典技巧,
if (+str[i] == str[i])
这会将当前字符串转换为数字,并将其与它的字符串值进行比较。如果它们相等,则表示当前元素是一个数字。
除此之外,该return
语句位于for
循环本身内。
因此,您的程序可以像这样固定
function NumberAddition(str) {
var numArr = [];
str = str.split("");
for (var i = 0; i < str.length; i++) {
if (+str[i] == str[i]) {
numArr.push(str[i]);
}
}
return numArr; // Outside the for loop
}
console.log(NumberAddition("55abcdef6ghij78"));
// [ '5', '5', '6', '7', '8' ]
但是,惯用的方式是Array.prototype.filter
像这样使用
function NumberAddition(str) {
return str.split("").filter(function(currentChar) {
return +currentChar == currentChar;
})
}
console.log(NumberAddition("55abcdef6ghij78"));
但是,较短的版本将使用Number
,例如
console.log("55abcdef6ghij78".split("").filter(Number));
// [ '5', '5', '6', '7', '8' ]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句