gpt4 book ai didi

javascript - 数组推送仍然使用以前的引用吗?

转载 作者:行者123 更新时间:2023-12-02 14:03:51 25 4
gpt4 key购买 nike

我有以下代码:

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 = {}; 放入循环内,但学生会以某种方式打印其所有内容的相同对象,因此它不能引用相同的引用。

有人知道为什么会发生这种情况吗?

最佳答案

您将 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;
});

关于javascript - 数组推送仍然使用以前的引用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40210005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com