1

これは非常に単純な例であり、皆さんの何人かが答えてくれることを望んでいます。これは、パラメータで指定された最大値を返すことになっている関数です。しかし、それがどのように行われるのか私にはわかりません。

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

私はこのように見えるmax関数に慣れているので、上記がどのように機能するかわかりません:

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

誰かが私にこのコードが最大の数を見つける方法を正確に説明できるなら、それは非常に役に立ちます。たとえば、なぜ彼は配列を使用しているのですか?そして、なぜ単項+がそのように使用されているのですか?(私はJSを初めて使用します)。

4

4 に答える 4

6

(a < b)-ブール値に評価されますtrue/false

+(a < b) ブール値をintに型キャストするので、0または1

[+(a < b)] -配列インデックスになる、[0]または[1]

[a,b][+(a<b)]--[0]またはを使用すると、新しい一時配列からor値[1]がヤンクされます。ab[a,b]

于 2012-11-30T21:51:32.733 に答える
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];
}
于 2012-11-30T21:51:17.690 に答える
1

シナリオ:

  1. [a, b]インデックス0と1の両方の要素を保持する配列を作成します。
  2. (a < b)trueブール値またはfalse;を返します。
  3. +(false|true)ブール値を数値型にキャストしているため、0または1になります。
  4. [a, b][0|1]対応するインデックスの下の配列から要素を返します。

例:

 var a = 1, b = 2;
  1. [1, 2];
  2. (1 < 2) === true;
  3. +(true) === 1;
  4. [1, 2][1] === 2
于 2012-11-30T21:52:45.723 に答える
0

aとで構成される配列を作成してから、b必要なインデックスを決定します。私はそれを拡張します:

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];
}
于 2012-11-30T21:50:49.090 に答える