【发布时间】:2015-08-30 17:40:11
【问题描述】:
我正在尝试将 .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 个代表。)
如您所见,Mark 在 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: M
userInputFirst: 马
userInputFirst:三月
userInputFirst: 标记
num: 3 nameSearch[A2].subjects[0] 是进阶数学
num: 3 nameSearch[A2].subjects[1] 是纯数学
num: 3 nameSearch[A2].subjects[2] 是微积分
num: 3 nameSearch[AP].subjects[0] 是进阶数学
num: 3 nameSearch[AP].subjects[1] 是纯数学
num: 3 nameSearch[AP].subjects[2] 是微积分
使用 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); ?>;
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: M
userInputFirst:三月
userInputFirst: 标记
num: 1 nameSearch[A2].subjects[0] 是纯数学
num: 1 nameSearch[AP].subjects[0] 是微积分
AP数组应该有两门科目,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?帮助您解决问题会更容易。
-
好吧,这个我没用过。这有点棘手。问题是我有 $studentNames 来自的外部 php 文件。
-
好的,但也许您可以提供该外部文件作为示例
标签: javascript arrays object