Javascript 。推到对象中的数组上
我正在尝试。推到对象中的数组上。我该怎么做 我有一个对象叫做students{}。每一行包含一个名字、姓氏、考试类型和该考试类型的科目。我正在尝试为此考试类型创建此学生所有科目的数组studentSubjectsByName。然后我想把这个主题数组放到另一个名为nameSearch{}的对象中 数据库中的信息如下所示 数据库表如下所示Javascript 。推到对象中的数组上,javascript,arrays,object,Javascript,Arrays,Object,我正在尝试。推到对象中的数组上。我该怎么做 我有一个对象叫做students{}。每一行包含一个名字、姓氏、考试类型和该考试类型的科目。我正在尝试为此考试类型创建此学生所有科目的数组studentSubjectsByName。然后我想把这个主题数组放到另一个名为nameSearch{}的对象中 数据库中的信息如下所示 数据库表如下所示 > id exam subject year session result first last &
> 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:Ma
userInputFirst:Mar
userInputFirst:标记
num:3名称搜索[A2]。科目[0]是进一步的数学
num:3名称搜索[A2]。科目[1]是纯数学
num:3名称搜索[A2]。主题[2]是微积分
num:3名称搜索[AP]。科目[0]是进一步的数学
num:3名称搜索[AP]。科目[1]是纯数学
num:3名称搜索[AP]。主题[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:Mar
userInputFirst:标记
num:1名称搜索[A2]。科目[0]是纯数学
num:1名称搜索[AP]。主题[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>
我想不出来。任何帮助都将不胜感激。谢谢你的问题不够清楚。我直接回答你的题目
object.array.push(value);
看看更新后的代码-我想你有一个输入错误:
function checkStudent(){
var nameSearch = {};
var subjectSearch = {};
var userInputFirst = document.getElementById('firstname').innerHTML;
var userInputLast = document.getElementById('lastname').innerHTML;
var students = [{ first: "first1", last: "last1", exam: "exam1", subject: "subject1"}, { first: "first2", last: "last2", exam: "exam2", subject: "subject2"}];
for(var i = 0; i < students.length; i++){
var studentSubjectsByName = [];
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);
studentSubjectsByName.push(students[i].subject);
nameSearch[students[i].exam] = {first:students[i].first, last:students[i].last, subjects:studentSubjectsByName};
nameSearch[students[i].exam].subjects.push(students[i].subject);
console.log(studentSubjectsByName);
console.log(nameSearch);
}
}
}
问题是:我无法使用.innerHTML实现这一点
var userInputFirst = document.getElementById('firstname').innerHTML;
var userInputLast = document.getElementById('lastname').innerHTML;
console.log("first: " + userInputFirst + " last: " + userInputLast);
但它确实起作用,从根本上说,是有价值的
var userInputFirst = document.getElementById('firstname').value;
var userInputLast = document.getElementById('lastname').value;
console.log("first: " + userInputFirst + " last: " + userInputLast);
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>
名字:
姓氏:
我使用的.value而不是.innerHTML是前面提到的类型吗?
谢谢添加语言标签JavaScript?也许您可以提供一个JSFIDLE?帮助你解决问题会更容易。好的,我以前没用过这个。这有点棘手。问题是,我有一个外部php文件,其中$studentNames来自。test好的,但也许您可以将该外部文件作为示例提供。输入错误是什么?在学生面前它是一个缺失的变量吗?对不起,似乎没有输入错误,但我重新构造了代码。它现在可以工作了吗?不幸的是,由于.innerHTML,它不能工作,但是.value可以工作。通过id获取的元素是input类型的输入。但是其余的工作正常吗?它正常工作,就像它在工作一样,但是数组没有正确填充。我仍然坚持原来的问题。谢谢,我现在看到了.innerHTML不能与输入元素一起使用,这就是为什么我需要使用.value.Yes,这就是为什么我认为可以将元素添加到对象中的数组中。名称搜索[students[i].考试].科目.pushstudents[i].科目@用户33760它确实有效。可能您有错误或输入错误,因此访问了未定义的对象或数组。尝试控制台查看是否有任何错误。我确实尝试了代码,它确实起了作用。