我有以下代码:
var students = [];
for(var i = 0; i < classes.length; i++) {
var student = {};
student = classes[i].student;
student.teacher = classes[i].teacher;
students.push(student);
}
不知何故,学生将为其所有内容打印相同的对象,虽然我已将var student = {};
放在循环中,因此它不能引用相同的参考。
任何人都知道为什么会这样?
答案 0 :(得分:2)
你把student = {}
放在循环中,然后紧跟在你之后的那一行,你通过分配student = classes[i].student
来覆盖它。
如果打算复制classes[i].student
的任何内容,您可以使用Object.assign()
method:
var student = Object.assign({}, classes[i].student);
在上下文中:
var students = [];
for(var i = 0; i < classes.length; i++) {
var student = Object.assign({}, classes[i].student);
student.teacher = classes[i].teacher;
students.push(student);
}
(请注意,Object.assign()
不会执行深层复制 - 我不确定这是否重要,因为您没有显示classes
数组结构是什么。)
您还可以使用.map()
method代替明确的for
循环:
var students = classes.map(function(c) {
var student = Object.assign({}, c.student);
student.teacher = c.teacher;
return student;
});