2016-07-21 8 views
1

JavaScriptの配列に対して、maxを見つけるきれいな方法が必要です。言うことは、その後、arrayMax次のとおりです。配列の最大値を探し、配列が空の場合は0を返します。

arrayMax([]) # 0 
arrayMax([1], [2]) # 2 
arrayMax([-1]) # -1 

Thxを:)

私が試したもの:

Math.max.apply(null, [1,2,3]) # 3 

しかし、それは動作しません:

Math.max.apply(null, []) # -Infinity 

注意私はの代わりに空の配列を0に戻したいので、this questionと重複しているわけではありません

+0

はい。私の答えを更新しましょう。 – songyy

+1

@Satpal:試して更新しました。 Math.max([1,2]]を試してみると – songyy

+0

@Satpal:これは重複した質問ではないので、Math.max([])はuを返します。空の配列に対して0を返すようにします。 – songyy

答えて

3

あなたは、配列の長さをチェックする機能が必要:0で始まる

function arrayMax(arr) { 
    return arr.length ? Math.max.apply(null, arr) : 0; 
}; 

ソリューションは唯一のマイナスの値を持つ配列の場合、間違った結果を生成します。

ES6のサポートにより、あなたはapply方法を避け、拡散演算子を使用することができます

function arrayMax(arr) { 
    return arr.length ? Math.max(...arr) : 0; 
}; 
+0

あなたは大佐です、恐ろしいです。 –

+0

私たちは皆です:)あなたは大歓迎です。 – trincot

+0

'...' ftw。あなたのES6ソリューションは素晴らしいです。 – spender

4

配列の長さプロパティをチェックします。

var arrayMax = function(arr) { 
 
    //Check length 
 
    if (arr.length == 0) 
 
    return 0; 
 

 
    //Otherwise use take advantage of native API 
 
    return Math.max.apply(null, arr); 
 
}; 
 

 
console.log(arrayMax([])) 
 
console.log(arrayMax([3,5,1]))

+0

執筆の時点で唯一正しい答えです。 – trincot

2

このメソッドは、配列の長さをチェックする必要はありません。しかし他のいくつかの欠点があるかもしれません:

function arrayMax(arr) 
 
{ 
 
    return arr.reduce(function(prevValue, curValue, curIndex){ 
 
    return Math.max(prevValue, curValue); 
 
    }, 0); 
 
} 
 

 
console.log(arrayMax(["1", "-2"])); 
 
console.log(arrayMax(["10", "2", ""])); 
 
console.log(arrayMax([]));

+0

これは '[-1、-2]'に間違った結果を与えます。 – trincot

+0

良いキャッチ@トリックありがとう、私はそれを改善しようとします。 –

1
myArray.reduce(function(prev,current){ 
    return prev===null ? current : Math.max(prev, current); 
}, null) || 0 

または非常に簡潔ES6の矢印の機能を持つ:

myArray.reduce((prev,current) => 
    prev===null ? current : Math.max(prev, current), null) || 0 
+0

簡潔な方法のように:) – songyy

+0

これは '[-1、-2]'に間違った結果を与えます。 – trincot

+0

@trincotこれ以上はありません – spender

0

は、あなたがすることによってそれを行うことができ、

function arrayMax(){ 
var val = Math.max.apply(null, [].concat.apply([], [...arguments])); 
return val == -Infinity ? 0 : val 
} 

console.log(arrayMax([1],[22,3,2],[3])); //22 
console.log(arrayMax([1],[3])); //3 
console.log(arrayMax([1])); //1 
console.log(arrayMax([])); //0 
+0

'[-Infinity、-1]'があればどうなりますか? – trincot

+1

@trincot '-1'が返されるため、そこでは最大値になります。 –

+1

本当に、私は速すぎました。しかし '[-Infinity]'は0になります。 – trincot

関連する問題