Javascript:将对象数组推送到数组

Javascript:将对象数组推送到数组,javascript,arrays,Javascript,Arrays,我有一个对象数组(全局范围): 正在通过更改单个对象来操纵此阵列: objects =[{id:"0",radius:4,},{id:"1",radius:5,}]. 或者通过将新对象推送到阵列: objects =[{id:"0",radius:4,},{id:"1",radius:5,},{id:"2",radius:3,}]. 每次操作之后,我想将整个数组保存到另一个名为“history”的数组中,以便能够调用每个状态 我试过: var history_obj =[]; var hi

我有一个对象数组(全局范围):

正在通过更改单个对象来操纵此阵列:

objects =[{id:"0",radius:4,},{id:"1",radius:5,}].
或者通过将新对象推送到阵列:

objects =[{id:"0",radius:4,},{id:"1",radius:5,},{id:"2",radius:3,}].
每次操作之后,我想将整个数组保存到另一个名为“history”的数组中,以便能够调用每个状态

我试过:

var history_obj =[];

var history_index = 0;

function save_to_history(){history_obj[history_index]=objects; history_index++;} 
function save_to_history(){
var status = objects; 
history_obj[history_index]=status;
history_index++;} 
而且:

function save_to_history(){history_obj.push(objects); history_index++;} 
我调试了脚本并发现,在运行save_to_history()函数n次之后,我的history_obj包含许多n个数组,但是所有数组都是相同的(应该是最后一个被推送的数组),不是[[state1]、[state2]、[state3]],而是[[state3]、[state3]]

我在这个论坛上读到,这个问题与范围有关

所以我试过:

var history_obj =[];

var history_index = 0;

function save_to_history(){history_obj[history_index]=objects; history_index++;} 
function save_to_history(){
var status = objects; 
history_obj[history_index]=status;
history_index++;} 
结果是一样的。
提前感谢您的帮助。

您可以使用
JSON.stringify()
将当前数组作为字符串推送到数组。

如果要将相同的引用添加到历史记录中,则需要先克隆它,然后再将其添加进去,如下所示:

JSON.parse(JSON.stringify(arr));

这应该可以解决问题:

function save_to_history(){
    history_obj.push(JSON.parse(JSON.stringify(objects)))
}

当您需要deepcopy对象时,它将继续更改,无论何时
对象更改,因此所有值都将相同,这正是您得到的结果。

非常感谢,这似乎可以完成工作。非常感谢,这似乎可以完成工作。非常感谢,这似乎很管用,看到了吗