2016-08-21 3 views
0
function largestOfFour(arr) { 
    var lista = []; 
    var max = 0; 
    for (var x = 0; x < arr.length; x++) { 
     for (var y = 0; y < arr[x].length; y++){ 
     if (arr[x][y] > max) { 
     max = arr[x][y]; 
     } 
     lista[x] = max; 
     } 
    } 
    return lista; 
    } 

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

^次の配列を生成します:[27,27,39,1001]が、答えは次のとおりです。[27,5,39,1001]私のJavascript for-loopは、1つのサブアレイ以外のすべてで機能しますか?

My機能が正しく、各サブの最大数を示します配列、2番目のサブ配列を除いて。私のコードのどの部分が間違っているのか分かりません。

答えて

1

max変数をリセットすることはありません。外側のループの各反復でそれをリセットする必要があります。 (1001とのサブアレイは、第一副配列されていた場合は、あなたの結果は[1001, 1001, 1001, 1001]をしてきたでしょう。)

function largestOfFour(arr) { 
 
    var lista = []; 
 
    var max; 
 
    for (var x = 0; x < arr.length; x++) { 
 
    max = 0; // <-- add this line 
 
    for (var y = 0; y < arr[x].length; y++){ 
 
     if (arr[x][y] > max) { 
 
     max = arr[x][y]; 
 
     } 
 
    lista[x] = max; 
 
    } 
 
    } 
 
    return lista; 
 
} 
 
    
 
console.log(largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]));

ところで、あなたは、コードの行数が少なく、あなたの場合と同じものを実装することができますこのような何かを:

function largestOfFour(arr) { 
 
    return arr.map(function(a) { 
 
    return Math.max.apply(Math,a); 
 
    }); 
 
} 
 

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

あるいは矢印機能を備えた短い:

var largestOfFour = arr => arr.map(a => Math.max.apply(Math,a)); 
 

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

0

あなたは最高のあなたがしたい場合は、この関数を書くことができる最初のループ

1

内のDEFを移動 リセットされません。 1行あなたの配列に.map()関数を適用し、Math.max()メソッドを使って各サブ配列の最大要素を返すことができます。

function largest(array) { 
    return array.map(a => Math.max(...a)); 
} 

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

あなたは関数型プログラミングについて見てみると、本当に便利です。

関連する問題