我正在尝试创建一个对象数组,但是当我推送到我的数组时,它正在添加对象的引用而不是复制值。
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++;
答案 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 });