【发布时间】:2018-08-14 02:48:28
【问题描述】:
我很困惑,我不明白为什么这段代码的结果(执行时)不正确。
我有 2 个对象数组(temparray1,temparray2)。基本上,我需要将 temparray1 的元素存储到 temparray2 然后使用 for 循环更新值。
var temparray1 = [{title:"hi1",name:"name1",age:1},{title:"hi2",name:"name2",age:2},{title:"hi3",name:"name3",age:3}];
var temparray2 = [];
for(var aaa =0; aaa < temparray1.length; aaa++){
temparray2.push(temparray1[aaa]);
var len = temparray2.length - 1;
temparray2[len].color = "blue";
temparray2[len].gender = "girl";
temparray2.push(temparray1[aaa]);
len = temparray2.length - 1;
temparray2[len].color = "red";
temparray2[len].gender = "boy";
}
我期待的结果是:
temparray2 = [
{title:"hi1",name:"name1",age:1,color:"blue",gender:girl},
{title:"hi1",name:"name1",age:1,color:"red",gender:boy},
{title:"hi2",name:"name2",age:2,color:"blue",gender:girl},
{title:"hi2",name:"name2",age:2,color:"red",gender:boy},
{title:"hi3",name:"name3",age:3,color:"blue",gender:girl},
{title:"hi3",name:"name3",age:3,color:"red",gender:boy}
];`
但我得到的实际结果是 temparray2 中所有项目的颜色和性别分别变为“红色”和“男孩”。此外,temparray1 中当前项目的值会更新,如 temparray1[0] = {title:"hi1",name:"name1",age:1,color:"red",gender:boy}。但我不打算更新 temparray1(第一个数组)。
请让我知道您对此的看法。这很令人困惑。提前致谢!
【问题讨论】:
-
您是在推送整个对象,而不是复制一个对象——因此对该对象的任何更改都会影响它所引用的所有位置。
-
明白了。谢谢!
标签: javascript jquery html arrays for-loop