2016-07-07 13 views
1

)配列内の最小値と最大値、そして2番目に大きな値と2番目に小さい値を検出するアルゴリズムを作成しようとしています。これは動作していないよう配列内の最小値と最大値を見つけよう(

numbers = [2, 4, 9, 2, 0, 16, 24] 

var largest = numbers[0]; 
var smallest = numbers[0]; 

for (var i = 1; i < numbers.length; i++) { 

    if (numbers[i] > largest) { 
     largest = numbers[i]; 
    } 
    else if(numbers[i] < smallest) { 
     smallest = numbers[i]; 
    } 

    console.log(largest); 
    console.log(smallest); 

} 

とちょうど私が間違っているの何...配列を出力します:

は、私は次のように試してみましたか?

+3

あなたのロジックは、最大と最小の数字を見つけるのにうれしいです。ループの外で 'console.log'ステートメントを動かすだけでよいのです。 –

+0

ああ、どうして私はそれを見ていないのですか...どのように恥ずかしい。 2番目に大きいものと2番目に小さいものを得るための提案? – MadCatm2

+0

「2番目に大きいものと2番目に小さいものを得るための提案はありますか?」 --- N個の要素のソートされた配列を維持する関数を作成します。それから 'numbers'配列を与えてください。 – zerkms

答えて

1

forループの外にconsole.logステートメントを移動します。

2

これを行う最も簡単な方法は、配列をソートして最初の2つと最後の2つの要素を返すことです。

slice()を使用すると、ソートされてから、配列自体を防ぐ:

var numbers = [2, 4, 9, 2, 0, 16, 24]; 
 

 
var sorted = numbers.slice().sort(function(a, b) { 
 
    return a - b; 
 
}); 
 

 
var smallest = sorted[0],      
 
    secondSmallest = sorted[1],     
 
    secondLargest = sorted[sorted.length - 2], 
 
    largest = sorted[sorted.length - 1]; 
 

 
console.log('Smallest: ' + smallest); 
 
console.log('Second Smallest: ' + secondSmallest); 
 
console.log('Second Largest: ' + secondLargest); 
 
console.log('Largest: ' + largest);

0

(ミスター・ラマ編)Roatinマルスは、この記事で言ったように:https://stackoverflow.com/a/6102340/6074388

することができます配列が以下のようにmath.minとmath.maxを使用するようにする

Array.prototype.max = function() { 
    return Math.max.apply(null, this); 
}; 

Array.prototype.min = function() { 
    return Math.min.apply(null, this); 
}; 

これはあなたがまた

var min = Math.min.apply(null, largest), 
max = Math.max.apply(null, largest); 

var min = Math.min.apply(null, numbers), 
max = Math.max.apply(null, numbers); 

を使用することができます任意の問題が発生する場合それは二番目に小さいと二番目に大きい数字を見つけて助けにはなりませんが、私は、これは最大と最小の番号を見つけるための簡単なソリューションであることを見つけます。

関連する問題