Я пытаюсь .push() на массив, который находится в объекте. Как я могу это сделать?.push на массив, который находится в объекте
У меня есть объект, называемый students {}. Каждая строка содержит первое имя, фамилию, тип экзамена и предмет для этого типа экзамена. Я пытаюсь создать массив (studentSubjectsByName) всех предметов для этого ученика для этого типа экзамена. Затем я хочу поместить этот массив объектов в другой объект с именем nameSearch {}.
Информационный в БД выглядит так,
В таблице базы данных выглядит следующим образом
> id exam subject year session result first last
>
> 186 A2 Further Mathematics 2015 January D Mark Murphy
>
> 185 A2 Pure Mathematics 2015 January A Mark Murphy
>
> 183 AP Calculus 2015 NULL 2 Mark Murphy
>
> 184 AP Chemistry 2015 NULL 5 David Smith
>
> 182 AP Calculus 2015 NULL 5 David Smith
(я не могу отправить изображение, как у меня нет 10 повторений.)
Как вы можете видеть, у Марка есть два предмета в A2.
Следующее подталкивает объекты к массиву и приводит к тому, что три объекта являются элементами массивов. Для каждого предмета есть массив, но у каждого из них есть три предмета. Вместо массива AP, имеющего два и массив A2, имеющих только один, как и должно быть. Это происходит потому, что var studentSubjectsByName = []; находится вне цикла for.
function checkStudent(){
var subjectSearch = {};
var nameSearch = {};
var userInputFirst = document.getElementById('firstname').value;
var userInputLast = document.getElementById('lastname').value;
var students = <?php echo json_encode($studentNames, JSON_PRETTY_PRINT); ?>;
var studentSubjectsByName = [];
for(var i = 0; i < students.length; i++){
console.log("userInputFirst: " + userInputFirst);
if(userInputFirst == students[i].first && userInputLast == students[i].last){
//console.log("First name: " + students[i].first + " Last name: " + students[i].last + " Exam: " + students[i].exam + " Subject: " + students[i].subject);
nameSearch[students[i].exam] = {first:students[i].first, last:students[i].last, subjects:studentSubjectsByName};//this clears the array
nameSearch[students[i].exam].subjects.push(students[i].subject);
//console.log(studentSubjectsByName);
//console.log(nameSearch);
}
}
for(var item in nameSearch){
var num = nameSearch[item].subjects.length;
for(var i=0; i<num; i++){
console.log("num: " + num + " nameSearch[" + item + "].subjects[" + i + "] is " + nameSearch[item].subjects[i]);
}
}
}
Выход
userInputFirst: М
userInputFirst: Ма
userInputFirst: Mar
userInputFirst: Марк
Num: 3 адресного поиска [А2]. предметы [0] - дополнительная математика
Num: 3 [A2 адресного поиска] .subjects [1] Чистая математика
Num: 3 [A2 адресного поиска] .subjects [2] Исчисление
NUM: 3 [AP адресного поиска] .subjects [0] Далее Математика
Num: 3 [AP адресного поиска] .subjects [1] Чистая математика
Num: 3 [AP адресного поиска] .subjects [2] исчисление
С вар studentSubjectsByName знак равно внутри цикла for массив постоянно очищается.
function checkStudent(){
var subjectSearch = {};
var nameSearch = {};
var userInputFirst = document.getElementById('firstname').value;
var userInputLast = document.getElementById('lastname').value;
var students = <?php echo json_encode($studentNames, JSON_PRETTY_PRINT); ?>;
for(var i = 0; i < students.length; i++){
var studentSubjectsByName = [];
console.log("userInputFirst: " + userInputFirst);
if(userInputFirst == students[i].first && userInputLast == students[i].last){
//console.log("First name: " + students[i].first + " Last name: " + students[i].last + " Exam: " + students[i].exam + " Subject: " + students[i].subject);
nameSearch[students[i].exam] = {first:students[i].first, last:students[i].last, subjects:studentSubjectsByName};//this clears the array
nameSearch[students[i].exam].subjects.push(students[i].subject);
//console.log(studentSubjectsByName);
//console.log(nameSearch);
}
}
for(var item in nameSearch){
var num = nameSearch[item].subjects.length;
for(var i=0; i<num; i++){
console.log("num: " + num + " nameSearch[" + item + "].subjects[" + i + "] is " + nameSearch[item].subjects[i]);
}
}
}
Выход есть.
userInputFirst: М
userInputFirst: Mar
userInputFirst: Марк
Num: 1 [A2 адресного поиска] .subjects [0] Чисто математический
Num: 1 адресного поиска [А.П. ].субъекты [0] - это исчисление
В массиве AP должно быть два объекта и один объект Calculus в массиве A2.
HTML, есть
<td class="left">
First name: <input type="input" name="last" id="firstname" onkeyup="checkStudent()" placeholder="first name">
</td>
<td class="left">
Last name: <input type="input" name="first" id="lastname" onkeyup="checkStudent()" placeholder="last name">
</td>
Я не могу понять это. Любая помощь будет оценена по достоинству. Спасибо
Добавить тег для языка, JavaScript? –
Может быть, вы можете предоставить jsfiddle? Было бы легче помочь вам с вашей проблемой. – lightstalker89
Хорошо, я не использовал это раньше. Это немного сложно. Проблема в том, что у меня есть внешний php-файл, откуда приходит $ studentNames. –