for循环中的字符串增量级联由于某些原因而忽略“ 0”

问题描述 投票:0回答:1

我正在编写一个从字符串获取数字字符串的功能,它的工作原理如下:-对于字符串中的每个字符,请检查其是否为0到9之间的数字-如果是,则将其包含在新字符串中-持续到字符串末尾。如果字符串为“ a0b109mmn5”,则函数应返回“ 01095”。

function stringToDigit(string) {
    if (string.length == 1) {
        switch (string) {
            case "0":
                return 0;
            case "0":
                return 0;
            case "1":
                return 1;
            case "1":
                return 1;
            case "2":
                return 2;
            case "2":
                return 2;
            case "3":
                return 3;
            case "3":
                return 3;
            case "4":
                return 4;
            case "4":
                return 4;
            case "5":
                return 5;
            case "5":
                return 5;
            case "6":
                return 6;
            case "6":
                return 6;
            case "7":
                return 7;
            case "7":
                return 7;
            case "8":
                return 8;
            case "8":
                return 8;
            case "9":
                return 9;
            case "9":
                return 9;
        }
    }
}
function stringToNum(string) {
    var numString = "";
    for (var i = 0; i < string.length; i++) {
        if (stringToDigit(string[i])) numString += string[i];
    }
    return numString;
}
// $.writeln(stringToDigit("0"));
// $.writeln(stringToNum("000"));
console.log(stringToDigit("0")); // gets 0, good
console.log(stringToDigit("00")); // gets undefined, good
console.log(stringToDigit("a")); // gets undefined, good
console.log(stringToNum("a000b1c2d3e4f5g6h7i8j9")); // gets 123456789, not 000123456789, NOT GOOD!

但是,由于某种原因,我不能在结果中包括“ 0”。我已经尝试了Visual Studio Code(带有我忘记了其名称的控制台插件)和Adobe ExtendScript Toolkit CC,所以我想知道这是否就是JavaScript的工作方式。

javascript for-loop increment string-concatenation zero
1个回答
2
投票

if (stringToDigit(string[i]))-类似于if(0),其中0被强制转换为false。请改用if (stringToDigit(string[i]) !== null)

if语句默认使用==(不是===)。因此,我们进行了一些转换,例如nullfalse0false

© www.soinside.com 2019 - 2024. All rights reserved.