如何遍历JavaScript数组并找到最高和最低值

时间:2018-05-04 20:47:47

标签: javascript arrays sorting

好的......非常新的JavaScript,所以我开始这个小家庭项目开始学习和熟悉。

这是情况。我有一个名为maxScore的var,它从和数组中拉出测试名称(例如test [0])和随机生成的“得分”(例如s0)

我想知道如何:

  1. 根据最高分数排序
  2. 显示所有具有相同最高值的测试名称和分数
  3. HTML code:

    <p id="result">Yourhighest score(s): </p>
    

    使用Javascript:

    var maxScore = [];
    
        maxScore.push({
          name: test[0],
          score: s0
        });
    
         maxScore.push({
          name: test[1],
          score: s1
        });
    
         maxScore.push({
          name: test[2],
          score: s2
        });
    
        // etc...
    
    // sort maxScore by Score
    
    // get highest test name & score(s)
    
    // get lowest test name & score(s)
    
    // Output name and score
    result.innerHTML = ???
    

    所需输出的示例:
    您的最高分:数学:98和英语98
    您的最低分数:公民:67

    (如果有办法以某种方式将最高的测试名称注入到php字符串中以便在页面上的其他位置使用,那也会很酷。)

    提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您可以创建几个函数来对数组进行排序,然后获取最小/最大值。我以前的回答并没有找到重复项,所以我更新了这个副本以查找任何重复项并将字符串模板格式化为:

&#13;
&#13;
var maxScore = [];


    maxScore.push({
      name: 'English',
      score: 69
    });

    maxScore.push({
      name: 'Math',
      score: 98
    });
    maxScore.push({
      name: 'Art',
      score: 95
    });
     maxScore.push({
      name: 'Science',
      score: 98
    });
    
    maxScore.push({
      name: 'History',
      score: 69
    });


function getMax(array){
  let highScores = [];
  array.sort((a,b) => a.score - b.score);

  highScores.push(array[array.length-1]);
  
  for (let i=0; i<array.length-1; i++){
    if (highScores[0].score === array[i].score){
      highScores.push(array[i]);
    }
  }
  return highScores;
}

function getMin(array){
  const lowScores = [];
  array.sort((a,b) => a.score - b.score);
  lowScores.push(array[0]);
  for(let i=1; i<array.length; i++){
    if (lowScores[0].score === array[i].score){
      lowScores.push(array[i]);
    }
  }
  return lowScores;
}


const highScore = getMax(maxScore);
let highScoreEl = document.getElementById("resultHigh");
for (i in highScore){
  highScoreEl.textContent += `${highScore[i].name}: ${highScore[i].score}, `;
}

const lowScore = getMin(maxScore);
let lowScoreEl = document.getElementById("resultLow");
for (i in lowScore){
  lowScoreEl.textContent += `${lowScore[i].name}: ${lowScore[i].score}, `;
}
&#13;
<p id="resultHigh">Your Highest Score: </p>
<p id="resultLow">Your Lowest Score: </p>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

首先,您需要将maxScore从对象数组转换为数字数组。您可以使用Array.prototype.map()来做到这一点。

然后,您需要找到该数组中最大和最小的数字。您可以使用Math.max()Math.min()来完成此操作。

最后,根据这两个数字,您需要找到maxScore中的最大和最小项目。请使用Array.prototype.filter()。您将使用Array.prototype.filter()两次,首先找到最大的项目,然后再找到最小的项目。

我将代码保留为练习。