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

时间:2017-10-14 16:39:56

标签: javascript arrays

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

objects =[{id:"0",radius:3,},{id:"1",radius:2,}].

通过更改单个对象来操作此数组:

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(){history_obj.push(objects); history_index++;} 

我调试了脚本并发现,在运行save_to_history()函数n次后,我的history_obj包含多个n个数组,但是所有数组都是相同的(那个数组应该是最后一个被推)不[[state1],[state2],[state3]]但是[[state3],[state3],[state3]]。

我已经在这个论坛中读过,这个问题与范围有关。

所以我试过了:

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

结果是一样的。 在此先感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您在历史记录中添加了相同的引用,您需要先将其克隆,然后将其添加到其中,如下所示:

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

答案 2 :(得分:-1)

这应解决问题:

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

因为你需要深度复制这个对象,只要你的objects发生变化,所有的值都相同,那么它就会继续改变,这正是你所做的&# 39;重新获得。