2015-09-24 58 views
5

私は次の問題があります。私の関数は4つの配列を含む配列を受け取ります。各要素は数字です。関数は各配列の最大要素を返さなければなりません。857が1000と1001よりも大きいのはなぜですか? Javascript

function largestOfFour(arr) { 
    var largest = []; 
    for (var i = 0; i < arr.length; i++) { 
    largest.push(arr[i].sort().pop()); 
    } 
    console.log(largest); 
    return largest; 
} 

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

結果:

Array [ 5, 27, 39, 857 ] 

どうやらそれは動作しますが、私は1000と1001は857より大きくされた最後の配列[1000、1001、857、1]、としようとしたとき、私は857を得る。なぜそれが起こるのですか?

+2

https://developer.mozilla.org/en-US/docs/Web:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

はこれを試してみてください/ JavaScript/Reference/Global_Objects/Math/max –

答えて

10

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

配列の値を文字列としてソートされています。数値でソートする場合は、カスタムコンパイラ関数を使用します。 MDNドキュメントから

var numberArray = [40, 1, 5, 200]; 

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

console.log('numberArray:', numberArray.join()); 
console.log('Sorted without a compare function:', numberArray.sort()); 
console.log('Sorted with compareNumbers:', numberArray.sort(compareNumbers)); 

出力:

numberArray:1,200,40,5
compareNumbersでソート:40,1,5,200
ソート比較する機能を持ちません。 1,5,40,200

2

array#sort数値を数値ではなく文字列として比較するメソッド。よりよい解決策は、あなたがまたarray#sortに機能を渡すと、この

array.sort(function(a,b) { return a - b }) 

ような何かを行うことができますarray.prototype.mapMath.max.apply

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

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

=> [5,27,39,1001] 

を使用しているpop()機能が削除され、配列の最後の要素を返します。この場合、1001になります。

+1

有効な推奨事項ですが、この回答では問題が原因を探す効果については説明していません。 –

2

ボトムライン:81より大きくなります。

ここで主題に関する簡潔な記事です:

arr.sort(function(a, b){return a-b}).pop(); 

それともMath.max()

+0

[* w3schools *](http://www.w3fools.com/)は参照しないでください。 [* ECMAScript 2015 *](http://www.ecma-international.org/ecma-262/6.0/index.html#sec-array.prototype.sort)は、最終的な参考資料です。[* MDN *](https: //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)を参考にしてください。 – RobG

+0

さて、ありがとう!私は今、携帯電話に乗っている。私は少しそれを修正します。 –

+0

@RobG W3SchoolのW3Foolsページは、もはやW3Schoolの重要性を欠いているようには見えません。「W3Schoolにはまだ問題はありますが、開発者の主な懸念事項には少なくとも取り組んでいます。" –

関連する問題