как найти несколько значений индекса массива для вызова другого массива, javascript - PullRequest
0 голосов
/ 01 марта 2020

Вот что у меня так далеко. У меня есть два массива, я нашел условные значения числового c массива 'оценка' (оценки> = 60), я сейчас пытаюсь найти значения индекса, которые соответствуют этим значениям массива, которые> = 60 , чтобы я мог затем вызывать эти индексы для другого массива «имена», чтобы возвращать «имена» учащихся, которые соответствуют проходящему баллу.

Любые указатели или советы очень благодарны, спасибо.

let total = 0;
let highest = 0;
let stuAvg= 0;  
let arr = [];


var names= [];
var grade= [];
var pos1 = [];



for (var i = 0; i < 10; i++) {             
    names.push(prompt('Enter The Ten Student Names | Student: ' + (i + 1))); 
    document.getElementById("stuNames").innerHTML=("Student's Names:" +names.join(','));
}
for (var i = 0; i < 10; i++) {              
    grade.push(Number(prompt('Enter The Ten Student Grades | Grade: ' + (i + 1))));
    total +=grade[i]; 
    stuAvg = total / grade.length;
    highest = Math.max(...grade);


    document.getElementById("stuGrades").innerHTML=("Student's Grades:" +grade.join(','));
}
function passing(grade) {
    return grade >= 60; 
}

function results() {
    pos1 = grade.indexOf(highest);
    arr = grade.filter(passing);


    document.getElementById("result").innerHTML=("Highest Grade:"+highest+"The Highest Grade 
          Belongs to:"+names[pos1]+" The Average Grade is "+stuAvg+"");
    document.getElementById("passing").innerHTML=("The Students who are passing are 
          "+arr+","+names+"");     
}

Ответы [ 3 ]

0 голосов
/ 01 марта 2020

Вы можете сохранить эти индексы в другом массиве при выполнении фильтра.

function results() {
    
    pos1 = grade.indexOf(highest);
    
    var passingStudents = []; // to store passing indexes
    arr = grade.filter((grade, index) => {
        var pass = grade >= 60;
        if(pass){
          passingStudents.push(index);
        }
        return pass;
    
    });
    passingStudents = passingStudents.map(index => names[index]); // change indexes for names

    document.getElementById("result")
        .innerHTML=("Highest Grade:"+highest
          +"\n The Highest Grade Belongs to:"+names[pos1]
          +"\nThe Average Grade is "+stuAvg+"");
    document.getElementById("passing")
        .innerHTML=("The Students who are passing are: " + passingStudents.join(", "));     
}

Теперь у вас есть нужные вам индексы в другом массиве.

0 голосов
/ 01 марта 2020

Там написано, что вы новый участник. Добро пожаловать в сообщество. Вот несколько советов о том, как улучшить ваш код.

1. Не сокращайте

Хотя некоторые общепринятые технические термины и установившиеся практики являются сокращенными, например HTML, CSS и XHR, не сокращайте такие слова, как students, в своем коде. Практика сокращения происходит от того времени, когда у компьютеров была ограниченная память, а экраны были маленькими, когда можно было набирать только что-то около ста символов в строке или что-то в этом роде.

2. Используйте функции и хорошо называйте их.

Я думаю, что вы пытаетесь сделать это, ввести данные об именах и оценках учеников и получить некоторую статистику, правильно? Если это так, вы можете написать свой код следующим образом:

function getStudentNames() { /* write your code here */ }
function getStudentGrades() { /* write your code here */ }
function analyse(students, grades) { /* write your code here */ }
function renderResults(analysis) { /* write your code here */ }

// and then run the whole thing here:
function main() {
  var students = getStudentNames()
  var grades = getStudentGrades()
  var analysis = analyze(students, grade)
  renderResults(analysis)
}

С этой структурой на месте, нам просто нужно беспокоиться о заполнении части, которая говорит /* write your code here */ для каждой функции. Это только один пример того, как вы можете структурировать свой код. Как вы узнаете позже в процессе разработки, это облегчит тестирование позже.

Вообще говоря, когда вы называете функцию, вы хотите назвать ее в следующем формате: verbNoun(). Например, вы можете увидеть такие функции, как fetchData(), renderImage(), getShape(), et c. Иногда вы видите функции, которые не следуют этому, такие как then() или render(). В любом случае, не используйте существительное в качестве имени вашей функции.

3. Узнайте больше о методах массива.

Хотя использование for-l oop имеет некоторые преимущества, в большинстве случаев повышение производительности незначительно, а использование методов массива обеспечивает ясность и удобочитаемость.

Например, суммирование массива чисел может быть достигнуто следующим образом:

var sum = [0,1,2,3,4].reduce(function(current, sum) {
  return current + sum
}, 0)

// more modern
const sum = [0,1,2,3,4].reduce((current, sum) => current + sum, 0)

console.log(sum) // prints 10

Полезные можно найти в Mozilla Developers Network , которая обычно является отличный источник изучения всего, что связано с сетью.

-

Надеюсь, это поможет

0 голосов
/ 01 марта 2020

После этой строки:

total +=grade[i];

Если это проходной балл, добавьте индекс этого учащегося к массиву PassGradeIndexes:

if (passing(grade[i])) passingGradeIndexes.append(i);

Затем выведите имена:

for (var i = 0; i < passingGradeIndexes.Length; i++) {
document.Write( names[passingGradeIndexes[i]] );
}
...