Как показать значение из массива, которое относится к значению другого массива, JavaScript

Я пытаюсь, чтобы имя появилось с баллом, связанным с этим именем. Поэтому, если наивысший балл составляет 98, я хочу, чтобы имя Джоэлса отображалось на дисплее, где указано имя.

var names = ["Ben", "Joel", "Judy", "Anne"];
var scores = [88, 98, 77, 88];
var average;
var total = 0;
var highestScore = 0;

var $ = function (id) { return document.getElementById(id); };

var displayResults = function () {
    for (var i = 0; i < scores.length; i++) {
        total = total + scores[i];       //both are numbers so adds
        if (scores[i] > highestScore) {
            highestScore = scores[i];
        }          
    }

    //then calculate the average and display
    average = parseInt(total/scores.length);
    document.getElementById("results_header").innerHTML = ("Results");
    document.getElementById("results").innerHTML = ("\nAverage score is " + average + "\nHigh score = Name here with a score of " + highestScore); 
};

window.onload = function () {
    //$("add").onclick = addScore;
    $("display_results").onclick = displayResults;
    //$("display_scores").onclick = displayScores;
};
 user63318316 июл. 2016 г., 23:39
Если вы заинтересованы в написании лучшего кода, я добавил подробные пояснения к моему ответу для решения каждого шага вашей проблемы. Если это домашнее задание, и вы отправили код, который дал вам ehsan, я бы дал вам очень низкую оценку.

Ответы на вопрос(6)

names а такжеscores массивы имеют одинаковые.length, вы можете использовать то же самоеi переменная для выбора элемента внутриnames массив как используется для выбора элемента вscores.

декларироватьname переменная

var name = "";

задаватьname переменная

if (scores[i] > highestScore) {
  highestScore = scores[i];
  name = names[i];
}

дисплейname переменная

document.getElementById("results")
.innerHTML = "\nAverage score  is " 
          + average 
          + "\nHigh score = " 
          + name 
          + " here with a score of " 
          + highestScore;
else {
names[names.length] = nameInput;

ScoreInput = Число (ScoreInput);

scores[scores.length] = scoreInput;

а также

// затем вычисляем средний и самый высокий балл

var displayResults = function () {   

Сбросить всего

итого = 0;

    for (var i = 0; i < scores.length; i++) {
            total = total + scores[i];      
                if (scores[i] > highestScore) {
            highestScore = scores[i];
            name = names[i];
Решение Вопроса

<html>
    <head>
        <style>
        </style>
    </head>
    <body>
        <p id="results"></p>
        <button id="display_results">Show</button>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
        <script>
               var names = ["Ben", "Joel", "Judy", "Anne"];
                var scores = [88, 98, 77, 88];
                var average;
                var total = 0;
                var highestScore = 0;
                var hightName = "";
                function displayResults () {
                    for (var i = 0; i < scores.length; i++) {
                            total = total + scores[i];       //both are numbers so adds
                                if (scores[i] > highestScore) {
                                    highestScore = scores[i];
                                    hightName = names[i];
                                }
                    }

                //then calculate the average and display
                        average = parseInt(total/scores.length);
                        document.getElementById("results").innerHTML = ("\nAverage score is " + average + "\n High score = " + hightName + " with a score of " +  highestScore);

                };
            
                    //$("add").onclick = addScore;
                   $(document).ready(function(){
                       $("#display_results").click(function(){
                           displayResults();
                       })
                       
                   })

        </script>
    </body>
</html>

 guest27131416 июл. 2016 г., 22:24
Чем этот ответ отличается отstackoverflow.com/a/38415234 ?
 user63318316 июл. 2016 г., 22:55
«попробуй» - это самое ленивое объяснение, которое я когда-либо видел

значение i соответствует персонажу в массиве people, Используйте это значение i, чтобы выбрать человека.

Чтобы упростить задачу, вы можете использовать объект, чтобы связать имя (строку) со счетом (int), например:

 var test = {"Ben": 88, "Joel": 98, "Judy": 77, "Anne": 88}

Тогда вам нужно будет изменить цикл for.

 colleen16 июл. 2016 г., 22:06
Как я учусь?
 chackerian16 июл. 2016 г., 22:18
Какие? Это как комплимент или ...: D?

его, чтобы получить имя. Я изменил ваш код для его поддержки и добавил комментарий «Изменения», где бы они ни были,

 var names = ["Ben", "Joel", "Judy", "Anne"];
    var scores = [88, 98, 77, 88];
    var average;
    var total = 0;
    var highScoreIndex = 0;// Changes

    var $ = function (id) { return document.getElementById(id); };

    var displayResults = function () {
        for (var i = 0; i < scores.length; i++) {
                total = total + scores[i];       //both are numbers so adds
                    if (scores[i] > highestScore) {
                highestScoreIndex = i; // Changes
            }

           }

    //then calculate the average and display
            average = parseInt(total/scores.length);
            document.getElementById("results_header").innerHTML =   
     ("Results");
            document.getElementById("results").innerHTML = ("\nAverage score  
          is " + average + "\nHigh score = " + names[highestScoreIndex] + " with a score of " +    
        scores[highestScoreIndex]); //Changes


    };

    window.onload = function () {
        //$("add").onclick = addScore;
        $("display_results").onclick = displayResults;
        //$("display_scores").onclick = displayScores;
    };

выполняемые в JavScript. Я надеюсь, что вы найдете эту информацию полезной.

Я предоставил подробные объяснения методов, использованных в этом ответе ниже. Все фрагменты могут быть запущены в вашем браузере. НажмитеВыполнить фрагмент кода ниже, чтобы увидеть результаты.

// input data
var names = ["Ben", "Joel", "Judy", "Anne"]
var scores = [88, 98, 77, 88]

// this is a common way to sum the numbers in an array
var total = scores.reduce(function(x,y) { return x + y }, 0)

// average = sum of scores / number of scores
var average = total / scores.length

// use Math.max to find the highest score
var highScore = Math.max.apply(null, scores)

// get the name matching the highest score
var highScoreName = names[scores.indexOf(highScore)]

// output the information to the console
// alternative: use innerHTML or something else to print to the DOM
console.log("total: %d", total)
console.log("average: %d", average)
console.log("highest score: %s had %d", highScoreName, highScore)

Суммирование массива чисел:

Вы могли бы использоватьfor петля илиforEach но это для пещерных людей.

var scores = [88, 98, 77, 88]
var total = 0

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

console.log("total scores: %d", total)
// 351

Как только вы узнаете о функциях высшего порядка, таких какArray.prototype.reduce вы никогда не вернетесь к императивным кошмарам своего прошлого

var scores = [88, 98, 77, 88]
var total = scores.reduce(function(sum, score) { return sum + score }, 0)

console.log("total scores: %d", total)
// 351

Не удушая вас слишком большим количеством деталей, функция сокращенияfunction(sum, score) { sum + score } будет вызываться один раз для каждого элемента в нашемscores массив. Возвращаемое значение функции будет использовано какsum в следующий раз это называется

iteration     sum       score      return
-----------------------------------------------------------------
#1            0         88         0 + 88 (88)
#2            88        98         88 + 98 (186)
#3            186       77         186 + 77 (263)
#4            263       88         263 + 88 (351) <-- final value

var total = scores.reduce(function(sum, score) { return sum + score }, 0)
// 351

Нахождение максимального числа массива:

Опять же, мы могли бы использовать неандертальские методы, как это

var max
var scores = [88, 98, 77, 88]
for (var i = 0; i < scores.length; i++) {
  if (max === undefined)
    max = scores[i]
  else if (max < scores[i])
    max = scores[i]
}

console.log("max score: %d", max)
// 98

Но мы намного умнее этого, верно? Мымог ДостичьArray.prototype.reduce еще раз, но на этот раз есть еще лучший способ.

Math.max скажет нам максимум предоставленных входов

var max = Math.max(1, 5, 9, 3, 10, 6)
console.log('max: %d', max)
// 10

Было бы хорошо, если бы мы могли просто написатьMath.max(scores) чтобы получить ценность для нашегоhighScore переменная, но Math.max работает только с числами, а не с массивами. Чтобы обойти это, мы можем использоватьFunction.prototype.apply который применяет функцию к массиву аргументов. Это идеально подходит для наших нужд

var scores = [88, 98, 77, 88]

// this is the same as writing Math.max(88, 98, 77, 88)
// but .apply allows us to keep the score values in an array
var max = Math.max.apply(null, scores)

console.log("max score: %d", max)
// 98

Связывание рекорда с соответствующим именем:

Когда у нас естьhighScore значение, мы должны найти имя человека, который соответствует этому баллу. Все, что нам нужно сделать, это хорошоиндекс изhighScore значение вscores массив, а затем найдите значение изnames массив с тем же индексом.

ПосколькуhighScore значение является известным значением изscores массив, мы можем использоватьArray.prototype.indexOf с гарантией того, что верный индекс будет возвращен.

var scores = [88, 98, 77, 88]
var highScore = Math.max.apply(null, scores)
var highScoreIndex = scores.indexOf(highScore)

console.log("highScore: %d, highScoreIndex: %d", highScore, highScoreIndex)
// highScore: 98, highScoreIndex: 1

Мы видимhighScoreIndex: 1 так какиндексы массива начинаются с 0 и прикинь. Индекс массива1 на самом деле относится квторой элемент в массиве.

Так что теперь все, что нам нужно сделать, это найти имя с помощью индекса1 чтобы получить соответствующее значение имени

var names = ["Ben", "Joel", "Judy", "Anne"]
var scores = [88, 98, 77, 88]
var highScore = Math.max.apply(null, scores)
var highScoreIndex = scores.indexOf(highScore)
var highScoreName = names[highScoreIndex]

console.log("high score of %d by %s", highScore, highScoreName)
// high score of 98 by Joel

Ваш ответ на вопрос