2017-11-03 2 views
0

私はfreeCodeCampの問題の解決策について以下に概説しました。そして、array.reduce()がどのように動作するかの論理/理解を確認したいと思います。array.reduce()の適切なユーザー

function largestOfFour(arr) { 

    // Created bigArray[]; as an empty container to push the largest number into. 
    var bigArray = []; 

    for(var i = 0; i < arr.length; i++){ 
    bigArray.push(arr[i].reduce(function(a, b) { 
    return Math.max(a, b); 
    })); 
    } 
    return bigArray; 
    } 

    largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]); 

したがって、reduce()は、aとbの間の最大値を返す関数を呼び出しています。

aは初期値であり、初期値を渡さなかったため0であり、現在の値は4であり、これはbである。明らか4は0とその時点で、Math.max = 4

then a = 4 and b = 5, then Math.max = 5 
then a = 5 and b = 1, then Math.max = 5 
then a = 5, and b = 3, then Math.max = 5 

こと大きく、アレイ内の各数を反復した後、それはbigArray []に5をプッシュする)(プッシュを使用します。

bigArray.push(arr[i].reduce(function(a, b){return Math.max(a, b);})); 
//arr[0] is now arr[4, 5, 1, 3] 
arr[0].reduce(function(a, b){return Math.max(0, 4);})); 
//Math.max returns 4 
arr[0].reduce(function(a, b){return Math.max(4, 5);})); 
//Math.max returns 5 
arr[0].reduce(function(a, b){return Math.max(5, 1);})); 
//Math.max returns 5  
arr[0].reduce(function(a, b){return Math.max(5, 3);})); 
//Math.max returns 5 

上記のロジックの後、5はbigArrayとbigArray = [5]に 'push()'を取得します。

自分のロジックと自分のコードの理解を確認するだけです。

+0

'arr'は配列の配列ですか? –

+0

パラメータを見ても明らかです。 –

+1

これはhttps://codereview.stackexchange.com/にもっと適しています – jmargolisvt

答えて

0

自分のロジックと自分のコードの理解を確認するだけです。

少し修正が必要です。 最初の反復において

比較は、45間にある04間にありません。

このデモを見てください

[4, 5, 1, 3].reduce(function(a, b) { 
 
    console.log(a, b) 
 
    return Math.max(a, b); 
 
})

出力だから、そこにわずか3回の反復は、あるこのdocumentationを見て

4 5 

5 1 

5 3 

です。反復回数はn-1であり、nが項目数です。

+0

ああ、私は分かりました、ありがとう、参照してください。 4と5が 'a'と 'b'に渡されるため、n-1です。この場合は3回だけです。 –