Javascript 。推到对象中的数组上

Javascript 。推到对象中的数组上,javascript,arrays,object,Javascript,Arrays,Object,我正在尝试。推到对象中的数组上。我该怎么做 我有一个对象叫做students{}。每一行包含一个名字、姓氏、考试类型和该考试类型的科目。我正在尝试为此考试类型创建此学生所有科目的数组studentSubjectsByName。然后我想把这个主题数组放到另一个名为nameSearch{}的对象中 数据库中的信息如下所示 数据库表如下所示 > id exam subject year session result first last &

我正在尝试。推到对象中的数组上。我该怎么做

我有一个对象叫做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: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它确实有效。可能您有错误或输入错误,因此访问了未定义的对象或数组。尝试控制台查看是否有任何错误。我确实尝试了代码,它确实起了作用。