【问题标题】:String of numbers can't start with zero. Other Solutions? [duplicate]数字字符串不能以零开头。其他解决方案? [复制]
【发布时间】:2018-07-27 20:10:35
【问题描述】:

我有一个只包含数字的字符串,但该字符串不能以零开头。

我想到的第一件事是:

let myNumber = "0052";
myNumber = myNumber.split('');
for (let i = 0; i < myNumber.length; i++) {
    if (myNumber[i] == '0') {
        myNumber.splice(i, 1);
        i--;
    } else {
        break;
    }
}
console.log(myNumber);
console.log('result:', myNumber.join(''));

一切正常。

我认为不使用经典的 for 循环可能还有其他方法。 我尝试使用 for-of 循​​环失败了。一旦我删除了数组的第一个条目,循环的索引就不会重置,因此它会跳过数组中的第二个 zero。这是代码:

let myNumber = "0052";
myNumber = myNumber.split('');
for (let n of myNumber) {
    if (n == '0') {
        myNumber.shift();
    } else {
        break;
    }
}
console.log(myNumber);
console.log('result:', myNumber.join(''));

对于这个问题还有哪些其他解决方案?有没有更高效的解决方案?

【问题讨论】:

  • 所以您的替代代码有效,但您想探索其他方法/解决方案?如果是这样,那么你的问题是在错误的地方。

标签: javascript arrays for-loop


【解决方案1】:

您可能正在寻找的是parseInt 函数。

const result = parseInt("0052", 10).toString();
console.log(result);

我还添加了toString() 将数字转换为字符串。 parseInt 也接受第二个参数 - 基数。 Read more about parseInt

【讨论】:

  • 这可能是最直接的解决方案 :-)
  • @Ele 是的,我想是的。因为我不使用花车。 Tomasz 感谢您的回答,有时我只是想办法开箱即用
  • 有时解决方案可能比我们想象的要容易! :) 看看@Ele 的回答,因为在许多情况下使用正则表达式思考也很好
  • 即使将基数指定为 10 也是个坏主意?不过好点!
【解决方案2】:

正则表达式:/^[0]+/

let myNumber = "0000000520";
console.log(myNumber.replace(/^[0]+/, ''))

【讨论】:

    【解决方案3】:

    使用 parseInt('0052') = 52

    parseFloat('0052.29') = 52.29如果你的号码是浮点型:

    【讨论】:

    • 感谢您的回答,但@Tomasz 已经使用过 parseInt
    【解决方案4】:

    我只是有与你不同且更简单的方法:)

    while(myNumber.length){
      if(myNumber.charAt(0) == '0')
        myNumber = myNumber.substring(1, myNumber.length);
    }
    

    演示:https://jsbin.com/falejuruwu/1/edit?js,console

    【讨论】:

    • 更简单:while(myNumber.charAt(0) == '0') myNumber = myNumber.slice(1);
    • @doodlemeister 你的更好 :) 我忘了切片
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 2013-02-12
    • 2018-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多