将对象推送到数组会产生相同的值

时间:2015-03-10 18:57:27

标签: javascript arrays javascript-objects array-push

我有以下javascript代码无法正常工作。我有一个复选框列表,其中两个项目是“TestDuration”和“AssessmentScores”。我正在尝试迭代列表(工作正常)并让它将检查的值添加到数组中。

var SAIndex = 0;
var SSIndex = 0;
var ScoresIndex = 0;
var SubAssessments = [];
var SubAssessmentScores = [];

//Get to the container element
var SSList = document.getElementById("islSubAssessmentScore_container");  

//turn it into an array of the checkbox inputs
SSList = SSList.getElementsByTagName("input"); 

//create a temporary object to store my values
var tempPair = new Object(); 

//iterate through the checkbox lists
for(var i = 1; i < SSList.length;i++) 
{
    //if the value is checked add it to the array
    if (SSList[i].checked) 
    {
        var P = SubAssessments[SAIndex];
        var V = SSList[i].value;
        //tempPair.Parent = SubAssessments[SAIndex];
        tempPair.Parent = P;
        //tempPair.Value = SSList[i].value;
        tempPair.Value = V;
        //show me the values as they exist on the page
        alert(tempPair.Parent + "|" + tempPair.Value); 
        SubAssessmentScores.push(tempPair);

        //show me the values I just added to the array
        alert(SubAssessmentScores.length-1 + "|" + SubAssessmentScores[SubAssessmentScores.length-1].Parent + "|" + SubAssessmentScores[SubAssessmentScores.length-1].Value); 

        //uncheck the values so when I refresh that section of the page the list is empty
        SSList[i].checked = false; 
    }
}

//output the list of objects I just created
for (i = 0;i < SubAssessmentScores.length;i++) 
    alert(i + "|" + SubAssessmentScores[i].Parent + "|" + SubAssessmentScores[i].Value)

现在发生的事情是,当我遍历列表时,我收到以下警告:
- 第一次通过 -

StudentID|TestDuration
0|StudentID|TestDuration

-second pass-

StudentID|AssessmentScores
1|StudentID|AssessmentScores

这是我期望输出的...但是在代码片段结束时,当它运行for循环以吐出所有值时,我得到以下警告......

0|StudentID|AssessmentScores
1|StudentID|AssessmentScores

我不能为我的生活弄清楚为什么它用第二个值替换第一个值。我以为它可能正在使用一个引用变量,这就是为什么我在P和V变量中加入以试图解决这个问题,但结果是相同的。

1 个答案:

答案 0 :(得分:2)

这是因为您在循环的每次迭代中添加相同的变量。

尝试按照以下方式更改推送:

SubAssessmentScores.push({
  Parent: P,
  Value: V
});

那就是说,我建议你在语言中学习更多的javascript和约定,例如你的变量命名是不受欢迎的,因为你只应该在名称的开头使用大写字母来构造函数。

一本好书是道格拉斯克罗克福德的好书。