Итак, сейчас я разрабатываю систему, в которой учащиеся могут ставить свои отметки в форме, которая будет запускать функцию, которая помещает все отметки внутри массива как объект.
Как: {english_period1: 10, english_period2: 7}
<Пример </p>
Но, если я хочу запустить array.prototype.forEach, чтобы что-то сделать с метками внутри массива.Это абсолютно ничего не возвращает..ForEach даже не запускается.
Это скрипт:
// Make new variable which will store the marks
let allMarks = [];
document.querySelector("#marks").addEventListener('submit', e => {
e.preventDefault();
//Execute for each input
for(let i = 0; i < e.srcElement.length-1; i++){
// Assign name and value
const name = e.srcElement[i].name;
const value = e.srcElement[i].value;
//Check if value is a mark (number)
if(value % 1 == 0 && value <= 10){
//Assign mark
allMarks[name] = value;
}else{
//Value is not a mark, check if it's a O, V or G
if(value == "O" || value == "V" || value == "G"){
allMarks[name] = value;
}else{
console.log("Niet toegestaan");
}
}
}
allMarks.forEach(mark => {
console.log("hello world");
});
},false);
Что он делает:
- После того, как пользователь поставил свои отметки и щелкнул и отправил форму
- Просмотрите все входные данные в форме и поместите имя плюс значение в качестве объекта в массиве.
- Просмотрите каждую вещь внутри массива и напечатайте «hello world» в консоли.
Цель сценария - вычислить средние оценки учеников и проверить их по некоторым правилам, чтобы определить, сдают ли они школьный год.
Что я делаю не так?Разве нельзя использовать array.prototype.forEach над массивом, который содержит объекты?Как я могу оптимизировать этот кусок кода?
Заранее спасибо!
ОТВЕТ
Вместо использования: allMarks[name] = value
, который не добавитэлемент в массив allMarks = []
.Использование allMarks.push({name: name, value: value});
поможет.Потому что теперь он будет добавлять элемент в массив (объект), и, таким образом, forEach может перебирать каждый элемент и получать его значения как обычный объект.
Особая благодарность: @ mhodges
LONG ANSWER
Поэтому после отладки, написав больше скриптов, я пришел к выводу, что с помощью объектакак некоторые предложили в ответах ниже, это лучший, более красивый вариант.
Можно динамически добавлять ключи к объекту, используя objectName[variableName]
.С помощью Object.keys(objectName)
вы можете перебрасывать ключи в массив и перебирать их.Это приведет (в моем случае) к более красивой структуре данных:
Вместо: [{field: "English", period: "period_1", mark: "7.5"}]
Это вернет:
"English": {
"period_1": 7.5,
"period_2": 6.4
}