2016-09-01 6 views
0

何とかarr [i] .sort()は最後の入れ子配列をソートせず、結果が悪くなります。 try ed FOR and WHILE, different operators, nothing helped. what i mが間違っていますか? 配列の中で最大の数値を返します。デフォルトsort()ことでメソッドsortは最後の入れ子配列をソートしませんJavaScript

function largestOfFour(arr) { 
 
    var i = 0; 
 
    while (i != arr.length) { 
 
    arr[i] = arr[i].sort().pop(); 
 
    i++; 
 
    } 
 
    return arr; 
 
} 
 

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

答えて

0

問題は、ソートのデフォルトである - それは文字列として配列をソート - ので、 "8 ..."> "1 ..."

は、次の試してみてください。

function cmp(a,b){ 
    return a-b; 
} 

function largestOfFour(arr) { 
    var i = 0; 
    while (i != arr.length) { 
    arr[i] = arr[i].sort(cmp).pop(); 
    i++; 
    } 
    return arr; 
} 

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

出力:[ 8, 27, 39, 1001 ]

2

は、文字列ではなく、数字、および"1001" < "817"として要素を順序付け。数値ソートが必要な場合は、数値の順序付けを行う比較関数を用意する必要があります。

function largestOfFour(arr) { 
 
    var i = 0; 
 
    while (i != arr.length) { 
 
    arr[i] = arr[i].sort(function(a, b) { 
 
     return a - b; 
 
    }).pop(); 
 
    i++; 
 
    } 
 
    return arr; 
 
} 
 

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

1

ない(@Barmarが答え)あなたは見ている問題の原因がありますが、各リストの最大数を取得するためにMath.max.applyArray.mapを使用することができます。

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

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

それとももう少しC oncise ES6と:

const largestOfFour = arr => arr.map(list => Math.max(...list)) 
関連する問題