遍历数字和字母数组并仅提取数字?

AziCode

我想遍历数字和字母数组,只提取数字。我尝试使用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;
    }
}
四人
  1. 如果只需要数字,那么有很多方法可以做到。但最简单的方法是使用RegEx,

    console.log("55abcdef6ghij78".match(/\d+/g).join(""));
    // 55678
    

    这会找到字符串中所有连续的数字(一个或多个数字),并将它们作为数组返回,然后我们最终将所有内容连接在一起以得到一个字符串。

  2. 如果您希望所有数字都是数组中的单独元素,则可以对RegEx进行一些调整,如下所示

    console.log("55abcdef6ghij78".match(/\d/g));
    // [ '5', '5', '6', '7', '8' ]
    
  3. 如果您希望按照评论中的要求对数字进行分组,那么就不要加入它们

    console.log("55abcdef6ghij78".match(/\d+/g));
    // [ '55', '6', '78' ]
    
  4. 如果您希望在将它们分组后立即将它们转换为数字,则可以map使结果数组Number起作用,如下所示

    console.log("55abcdef6ghij78".match(/\d+/g).map(Number));
    // [ 55, 6, 78 ]
    

除此之外,如果您要修复程序,则有两个主要错误。

  1. typeof str[i] === 'number'

    中的元素str将仅是字符串类型。因此,它们将永远不等于number要解决此问题,您可以使用经典技巧,

    if (+str[i] == str[i])
    

    这会将当前字符串转换为数字,并将其与它的字符串值进行比较。如果它们相等,则表示当前元素是一个数字。

  2. 除此之外,该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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章