2017-12-02 3 views
0

あなたは非常に親切で、以下のコードの "else if"ステートメントが配列から2番目に大きい数字を返す方法を説明しますか?JavaScriptを使用して配列内の次に大きい数字を見つけるIf ... Elseステートメント

特に、else if文内にAND演算子(& &)が存在しません。私は、exのための意味:

else if (max2 < array[i] && max1 > array[i]) 

(「それが動作する理由」)私はstackoverflowの上の人がこの種のアプローチを使用していますが、彼らは任意の詳細な説明を与えていない:

var arr1 = [2, 3, 1, 6, 100, 49, 5, 7, 8, 9]; 
 

 
function getSecondMaxNumber(array) { 
 
    var max1 = 0; 
 
    var max2 = 0; 
 
    for (var i = 0; i <= array.length; i++) { 
 
     if (max1 < array[i]) { 
 
      max1 = array[i]; 
 
     } else if (max2 < array[i]) { 
 
      max2 = array[i]; 
 
     } 
 
    } 
 
    return max2; 
 
} 
 
console.log(getSecondMaxNumber(arr1));

更新

上記の方法は間違っています。

私が使用することを決めた:

var arr1 = [2, 3, 1, 6, 100, 49, 5, 7, 8, 9]; 


function getSecondMaxNumber(array) { 
    function sortNumbers(a, b) { //Compare numbers. 
     return a - b; 
    } 
    var arrSorted = array.sort(sortNumbers); //Set up sorting. 
    return arrSorted[arrSorted.length - 2]; //Choose the second largest number in an array. 
} 
console.log(getSecondMaxNumber(arr1)); //Show me that number. 
+0

'else'テストにのみ実行されたときに'配列[i]は> = max1'あなたの提案 '&&'句のための必要はありませんので。 – Pointy

+1

あなたのアルゴリズムはソートされた番号では機能しません。 –

+0

そうです。すべての数値配列では機能しません。 –

答えて

0
if (max1 < array[i]) { 

現在の番号が現在の最大番号より大きい場合は、その番号を最大番号に設定します。それは二番目に大きいかもしれそのない最大数場合

} else if (max2 < array[i]) { 

多分短い:

const result = array.reduce(([max, max2], el) => el > max ? [el, max] : el > max2 ? [max, el] : [max, max2], [0,0])[1]; 
1

if条件はすでにmax1未満array[i]である可能性を排除していますので、あなたが&&は必要ありません。 ifが最初に失敗することなく、else ifの状態になることはできません。

ループ条件は、<=の代わりに<である必要があります。

関連する問題