我已經定義了多個區間 [0, 20[,[20, 70[, [70, 200[, [200, 500[, [500, 10000[, [1000, infinity[。對于給定的 x 值,我們在 [0,1,2,3,4,5] 中得到一個值 y,其中 [0, 20[ 對應于 0 等...基本解決方案是使用 if 陳述句,例如:
if (x>=0 && x<20){
y = 0
}
if (x>=20 && x<70){
y = 1
}
.
.
.
此任務是否有其他解決方案(更少代碼)?我在nodejs中使用這段代碼
uj5u.com熱心網友回復:
使用else if,那么您不需要檢查下限,因為之前的檢查已經處理了。
if (x < 20) {
y = 0;
} else if (x < 70) {
y = 1;
} ...
或者您可以將限制放在一個陣列中,然后回圈直到超過限制。
const limits = [20, 70, 200, ...];
let y;
for (y = 0; y < limits.length && x < limits[y]; y ) {};
uj5u.com熱心網友回復:
你可以使用這樣的邏輯:
const intervals = [
{ from: 0, to: 20},
{ from: 20, to: 70},
{ from: 70, to: 200},
{ from: 200, to: 500},
{ from: 500, to: 1000},
{ from: 1000, to: Number.POSITIVE_INFINITY}
];
function findInterval(x) {
for (let i in intervals) {
if (x >= intervals[i].from && x < intervals[i].to) {
return i;
}
}
throw new Error('Argument not within intervals');
}
// test:
const testvalues = [5, 21, 90, 345, 878, 9234802];
for (let x of testvalues) {
console.log(`interval of ${x}: ` findInterval(x));
}
// output:
interval of 5: 0
interval of 21: 1
interval of 90: 2
interval of 345: 3
interval of 878: 4
interval of 9234802: 5
uj5u.com熱心網友回復:
你可以試試這個
const ranges = [
[0, 20],
[20, 70],
[70, 200],
[200, 500],
[500, 10000],
[1000, Infinity]
];
function getIntersectionIndex(x) {
for (let i = 0; i < ranges.length; i ) {
if (ranges[i][0] <= x && x < ranges[i][1])
return i;
}
return -1;
}
const y = getIntersectionIndex(10); // returns 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/478251.html
標籤:javascript 节点.js if 语句
