Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JavaScript For Loop Array Iteration Issue - Using One vs Two Loops

The aim of this problem is to iterate through a list, find the largest value in the list, and then report the index values of the highest values. I was able to solve this problem using two for loops:

var scores = [60, 50, 58, 54, 54, 58, 50, 52, 54, 48, 69, 34, 55, 51, 52, 44, 51, 69, 64, 66, 55, 52, 44, 18, 41, 53, 55, 61, 51, 44];
var highscore = 0;
var highscoreSolutions = [];

for (var i = 0; i < scores.length; i++){
 if (scores[i] > highscore){
     highscore = scores[i];
 } 
}

for (var i = 0; i < scores.length; i++){
 if (scores[i] == highscore){
    highscoreSolutions.push(i);
   }
  }

console.log(highscore);
console.log(highscoreSolutions);

I initially tried to solve this problem using just one for loop, but I encountered an initialization issue of sorts, that is, no matter, the first index value would be included in the list of highest scores:

var scores = [60, 50, 58, 54, 54, 58, 50, 52, 54, 48, 69, 34, 55, 51, 52, 44, 51, 69, 64, 66, 55, 52, 44, 18, 41, 53, 55, 61, 51, 44];
var highscore = 0;
var highscoreSolutions = [];

for (var i = 0; i < scores.length; i++){
  if (scores[i] >= highscore){
    highscore = scores[i];
    highscoreSolutions.push(i);
  } 
}

console.log(highscore);
console.log(highscoreSolutions);

I'm not sure how to get around the issue of adding the 0 index value (without resorting to using two separate for loops). Can anyone help me out? Thanks so much!! :)

like image 233
Kiyana Avatar asked Aug 19 '15 21:08

Kiyana


1 Answers

You need to clear the list when you find a new highest value:

var scores = [60, 50, 58, 54, 54, 58, 50, 52, 54, 48, 69, 34, 55, 51, 52, 44, 51, 69, 64, 66, 55, 52, 44, 18, 41, 53, 55, 61, 51, 44];
var highscore = 0;
var highscoreSolutions = [];
var score;

for (var i = 0; i < scores.length; i++) {
  score = scores[i];
  if (score == highscore) {
    highscore = score;
    highscoreSolutions.push(i);
  } else if (score > highscore) {
    highscore = score;
    // We have a new highest score, so all the values currently in the array
    // need to be removed
    highscoreSolutions = [i];
  }
}

snippet.log(highscore);
snippet.log(highscoreSolutions.join(", "));
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
like image 64
James Brierley Avatar answered Oct 30 '22 22:10

James Brierley