在Javascript中将长号转换为1M,1K等

时间:2018-02-06 19:47:16

标签: javascript

如果条件为真,第一次如何停止循环?

<p id="numb"></p>

这是我的代码javascript,我在哪里错了?我希望当条件为真时,循环停止并且不检查其他变体?

function round (number) {
    var str = number.replace(/[, .]/g, "");
    var numb = parseInt(str);
    var point = {
        "T": Math.pow(10, 12),
        "B": Math.pow(10, 9),
        "M": Math.pow(10, 6),
        "K": Math.pow(10, 3)
    };

    Object.keys(point).forEach(function (key) {
        var pNumb = point[key];
       // console.log(pNumb);
      //  console.log(key);
        if (pNumb < numb) {
            var letter  = key;
            console.log(letter);
            var z = numb / pNumb;
            if (numb % pNumb !== 0) {
                document.getElementById("numb").innerHTML = z.toFixed(1) + letter;
            } else {
                document.getElementById("numb").innerHTML = z + letter;
            }
            return false;
        }

    });
}
    round("665,421,000")

2 个答案:

答案 0 :(得分:1)

返回false不会提前停止forEach循环。提前停止这种循环的唯一方法是抛出一个异常(你需要在循环之外捕获)。

如果您使用足够新版本的Javascript,我通常会推荐using a for...of loop而不是forEach。但在这种情况下,由于您在对象(而不是对象本身)上调用forEach的结果调用Object.keys(),因此您只需使用for .. 。in循环,它永远存在于Javascript中。

答案 1 :(得分:0)

除了forEach如果你从它返回值没有返回值,你的代码是错误的,因为你假设对象键维持它们的顺序,你应该写这样的东西:

function round (number) {
    const str = number.replace(/[, .]/g, "");
    const numb = parseInt(str);
    const point = [
        ["T", Math.pow(10, 12)],
        ["G", Math.pow(10, 9)],
        ["M", Math.pow(10, 6)],
        ["K", Math.pow(10, 3)]
    ];

    for (const [key, pNumb] of point) {
        if (pNumb < numb) {
            const letter  = key;
            const z = numb / pNumb;
            if (numb % pNumb !== 0) {
                return z.toFixed(1) + letter;
            } else {
                return z + letter;
            }
        }
    }
}

您还有一个拼写错误,而不是"G",您有"B"