假设你有号码var n = 1,000,000;
我想查一下:
n >= 1e3
n >= 1e4
n >= 1e5
n >= 1e6
完全按照上面的说法执行它会导致语句在第一个有效表达式上返回true,显然。这意味着它会说n is greater than 1e3
并从那里返回结果。
我怎样才能把它改为“级联”?通过表达式直到它遇到错误,然后使用最后一个为真的语句,而不必去:
if( n >= 1e3 && n >= 1e4 && n >= 1e5 && n >= 1e6 ) {...
答案 0 :(得分:1)
你应该检查从最大到最小的数字:
var n = 1000000;
var r = document.getElementById("result");
if (n >= 1e6) r.innerHTML = "n >= 1e6";
else if (n >= 1e5) r.innerHTML ="n >= 1e5";
else if (n >= 1e4) r.innerHTML ="n >= 1e4";
else if (n >= 1e3) r.innerHTML = "n >= 1e3";
<div id="result"></div>
如果你需要拥有所有不同的句子,你可以这样做:
var r = document.getElementById("result");
var n = 1000000;
var str = "";
if (n >= 1e6) str += "n >= 1e6 ";
if (n >= 1e5) str += "n >= 1e5 ";
if (n >= 1e4) str += "n >= 1e4 ";
if (n >= 1e3) str += "n >= 1e3 ";
r.innerHTML = str;
<div id="result"></div>
要有更可维护和可扩展的东西:
var n = 1000000;
var r = document.getElementById("result");
check(n, [1000, 1e4, 1e5, 1e6]);
function check(nb, limits) {
limits.sort(function(a, b){return b-a});
var limitsLength = limits.length;
for (var i =0;i<limitsLength;i++) {
if (nb >= limits[i]) r.innerHTML += "n >= 1e" + Math.log10(limits[i]) + " ";
}
}
<div id="result"></div>
答案 1 :(得分:1)
无需分支。
function yours() {
if (n < 1) return 'n is less than 1e0';
return 'n is greater than 1e' + Math.log10(n);
}
如果你必须分支(例如,如果你实际上计算的东西比简单的对数更复杂),添加一个新函数以避免你提到的“级联”。 return语句将阻止级联。新函数定义了跳过多少东西。
function yours() {
println(figure(n));
}
function figure(n) {
if (n > 10000) return 'n is greater than 1e4';
if (n > 1000) return 'n is greater than 1e3';
if (n > 100) return 'n is greater than 1e2';
if (n > 10) return 'n is greater than 1e1';
if (n > 1) return 'n is greater than 1e0';
}
我在这里使用println
代替您想要对结果做的任何事情。