javascript数组推送对象的值

时间:2014-01-28 01:47:50

标签: javascript arrays reference

我正在尝试创建一个对象数组,但是当我推送到我的数组时,它正在添加对象的引用而不是复制值。

var nestedOrgList = [];
var tempTopOrg = {};

var i = 0;
while (typeof divList[i] !== 'undefined') {
    tempTopOrg.org = divList[i++]; // increment i after we assign this
    tempTopOrg.suborgs = [];

    while ($(divList[i]).has('.expand').length < 1 && i < divList.length) {
        tempTopOrg.suborgs.push(divList[i++]);
    }

    nestedOrgList.push(tempTopOrg);
};

有更好的方法吗?或者我需要手动复制吗?

nestedOrgList[insertIndex].org = tempTopOrg.org;
// etc..
insertIndex++;

4 个答案:

答案 0 :(得分:2)

您可以查看以下答案

How do I correctly clone a JavaScript object?

JSperf

http://jsperf.com/cloning-an-object/82

肯定JavaScript应该有一种原生方式来复制引用。

答案 1 :(得分:0)

如果速度不是关键目标,则常用方法是使用JSON编码/解码对象:

var json = JSON.stringify(tempTopOrg);
nestedOrgList.push( JSON.parse(json) );

答案 2 :(得分:0)

javascript通过引用传递对象和数组,因此您必须在推送之前制作副本,

myarray.push(JSON.parse(JSON.stringify(obj)));

快速而且很脏,可能存在性能问题,

this question试图解决对象的克隆问题。

答案 3 :(得分:0)

使用

进行深层复制
var newcopy = temp.slice(0);

并过滤未定义和空值使用

newcopy  = newcopy.filter(function(e){ return e });