给定2个正的int值,返回10..20(含)范围内的较大值,如果两个值都不在该范围内,则返回0

时间:2016-07-07 11:06:33

标签: javascript if-statement

我的问题是,我似乎无法访问第二个else / if语句,其中我尝试包含一个子句,如果一个数字仍在范围内,它仍然应该返回。语法是正确的,我被告知我的括号放置不当但我无法理解在哪里或如何。

var max1020=function(a, b) {
    if ((a >= 10 && a <= 20) && (b >= 10 && b <= 20)) { 
        if (a > b) { //comparing my a and my b and returning greater
            return a;  
        } else if (b > a) {
            return b;
        } else if ((a >= 10 && a <= 20) || (b >= 10 && b <= 20)) { 
            if (a >= 10 && a <=20) {
                return a;
            } else if (b >= 10 && b <=20) {
                return b;
            }
        } else {
            return 0;
        }
    }
};

4 个答案:

答案 0 :(得分:1)

如果在范围内,您可以使用Math.max进行正确的检查。

&#13;
&#13;
function range(a, b) {
    function inRange(v) {
        return v >= 10 && v <= 20 ? v : 0;
    }
    return Math.max(inRange(a), inRange(b));
}

console.log(range(-1,-5));
console.log(range(1, 5));
console.log(range(10, 5));
console.log(range(10, 15));
console.log(range(100, 15));
&#13;
&#13;
&#13;

答案 1 :(得分:0)

如果a大于b并且b大于a,那么您似乎正在返回。所以,只有当a = b时,你才能到达第二个吗?也许我错过了什么。

答案 2 :(得分:0)

var max1020=function(a, b) {
 var max = (a>b?a:b);   //first find the max value of a and b 
 if(max>=10&&max<=20) return max; //if max is in range then at 
                                 //least on of them is in range and is bigger
 else if(a>=10 && a<=20) return a; //if the max in not in range then only one could be in range so return the one that in range
 else  if(b>=10 && b<=20) return b;
 return 0;  //if you reach this point none of them was in range
};

答案 3 :(得分:0)

如果您利用了一些新的ES6功能,您可以使您的功能更短,更简单,更好。

function maxRange(min, max, ...values) {
  values = values.filter(e => e >= min && e <= max);
  return values.length ? Math.max(...values) : 0;
}

您可以指定范围,但不限于2个值。你可以像这样使用它

maxRange(10, 20, 10, 15)  // Returns 15
maxRange(10, 20, 10, 15, 20, 30)  // Returns 20
maxRange(10, 20, 5, 25, 99)  // Returns 0
maxRange(100, 150, 99, 120, 200)  // Returns 120
maxRange(-50, -20, 12, -77, 123, -24) // Returns -24

这是一个有点评论的版本,可以更好地了解它的工作原理。

function maxRange(min, max, ...values) {    // Collects the remaining arguments in an array with the rest operator
  values = values.filter(e => {     // Filter the arguments. Using the arrow function
    if(e >= min && e <= max) {      // Test if an argument is in range
      return true;      // Keep it if its in range
    }
    else {
      return false;     // Discard it otherwise
    }
  });
  if(values.length) {   // Test if we have any arguments left
    return Math.max(...values); // Return the highest of them. Using the spread operator
  }
  else {
    return 0;       // Return 0 if no argument was in range
  }
}

以下是有关我使用过的功能的更多信息

Rest Operator

Spread Operator

Arrow Function

Array Filter

Conditional (Ternary) Operator