Как использовать javascript filter (), чтобы найти все одинаковые оценки и сохранить их в другом массиве, чтобы затем распечатать имена учеников - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь узнать, как использовать filter (), используя javascript со строками. Моя идея состоит в том, чтобы использовать filter (), чтобы найти все вхождения, которые имеют одинаковое строковое значение в массиве, и использовать те, которые выводят все имена, имеющие одинаковую оценку из другого массива.

Но мне до сих пор удавалось только напечатать все имя учащегося с соответствующей оценкой, а не, например, только все имена, которые имеют оценку 'C'.

Что я пробовал это далеко, чтобы ввести значение / класс в текстовое поле, чтобы я мог использовать эти значения для поиска в массиве. Я реализовал базовый c код, который должен быть в состоянии решить мою миссию этого кода. Но ничего не происходит, если я не использую для l oop, тогда он печатает все имена с их соответственно оценкой. И насколько я понял из прочитанного, мне не нужно было использовать что-либо для l oop, чтобы заставить код делать то, что я хочу.

Я чувствую себя застрявшим.

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

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

это это стиль информации какого-то источника, который я нашел, и все остальное, что я нашел, было очень похоже на это.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter https://www.geeksforgeeks.org/javascript-array-filter https://www.javascripttutorial.net/javascript-array-filter/

Я не уверен, должен ли я показывать какой-либо код или нет, но здесь все равно идет.

var studentArray = ["Clara", "Andreas", "Emilio", "Sarah", "Alice", "Victoria", "Thomas", "Roberta"];
var gradeArray = ["A", "B", "C", "A", "D", "C", "E", "E"];

function input() {
    var grade = document.getElementById("grade").value;
    return grade;
}

function getGradesToNames() {
    var filteredArray = gradeArray.filter(input);
    for (var i = 0; i < filteredArray.length; i++){
        document.getElementById("output2").innerHTML += studentArray[i] + " " + filteredArray[i] + "<br/>"; 
    }
}
function print() {
    input();
    getGradesToNames();
} 

Я знаю, что я начинающий, но Я надеюсь, что кто-то может помочь мне, направляя меня в правильном направлении. Заранее спасибо.

1 Ответ

0 голосов
/ 22 апреля 2020

Использование .filter не будет хорошо работать здесь, по крайней мере, не в одиночку , потому что, как только вы отфильтруете один из массивов, вы потеряете индекс каждого элемента, к которому он подключен. элемент в другом массиве. Если вы хотите фильтровать, сперва сожмите массивы вместе, чтобы у вас был массив объектов со свойствами name и grade:

var studentArray = ["Clara", "Andreas", "Emilio", "Sarah", "Alice", "Victoria", "Thomas", "Roberta"];
var gradeArray = ["A", "B", "C", "A", "D", "C", "E", "E"];
const zipped = studentArray.map((name, i) => ({ name, grade: gradeArray[i] }));

function getGradesToNames() {
  zipped
    .filter(({ grade }) => grade === 'C')
    .forEach(({ name, grade }) => {
      document.getElementById("output2").innerHTML += name + " " + grade + "<br/>"; 
    });
}
getGradesToNames();
<div id="output2"></div>

Если искомая оценка исходит из переменной, такой как ввод, просто замените === 'C' сравнением с этой переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...