这个最大代码有什么作用?

时间:2012-11-30 21:49:31

标签: javascript

这是一个非常简单的例子,我希望你们中的一些人能够回答。这是一个应该返回参数中给出的最大值的函数。但问题是我不明白 它是如何做到的。

function max(a, b) {
  return [a, b][ +(a < b) ];
}

我已经习惯了这样的max函数,所以我不知道上面是如何工作的:

function max(a, b) {
    return a > b ? a : b;
}

如果有人可以向我解释这段代码究竟是如何找到最大数字的话,那将非常有帮助。例如,他为什么要使用数组?为什么以这种方式使用一元+? (我是JS的新手。)

4 个答案:

答案 0 :(得分:6)

(a < b) - 评估为布尔值true / false

+(a < b)将布尔值强制转换为int,因此您将拥有01

[+(a < b)] - 成为数组索引[0][1]

[a,b][+(a<b)] - 使用[0][1],会从新的临时数组a中抽出b[a,b]值。< / p>

答案 1 :(得分:2)

如果a小于b,则结果为true,由于一元1运算符,结果转换为+

否则结果为false,并转换为0

因此01用作索引来从数组中获取值。


这样想:

function max(a, b) {
    var arrayOfValues = [a, b],
        a_is_less_than_b = a < b,
        index;

    if (a_is_less_than_b)
       index = 1;
    else
       index = 0;

    return arrayOfValues[index];
}

答案 2 :(得分:1)

<强>情境:

  1. [a, b]创建一个数组,其中包含索引为0和1的两个元素;
  2. (a < b)返回布尔值truefalse;
  3. +(false|true)将布尔值转换为数字类型,因此它变为0或1;
  4. [a, b][0|1]返回相应索引下的数组中的元素。
  5. 示例:

     var a = 1, b = 2;
    
    1. [1, 2];
    2. (1 < 2) === true;
    3. +(true) === 1;
    4. [1, 2][1] === 2

答案 3 :(得分:0)

您创建一个由ab组成的数组,然后您决定所需的索引。我会扩展它:

function max(a, b) {
  var arr = [a,b];
  var aLTb = (a < b); // a boolean - whether or not a is less than b
  var index = +aLTb; // convert boolean to 0 or 1, which gives us an index
  return arr[index];
}