可能的重复: 复制JavaScript对象最有效的方法是什么?
我需要复制一个(有序的,不是关联的)对象数组。我用的是jQuery。我最初尝试过
jquery.extend({}, myArray)
但是,自然地,这给了我一个对象,我需要一个数组(真的爱jquery。顺便说一下,延伸)。
复制数组的最佳方法是什么?
可能的重复: 复制JavaScript对象最有效的方法是什么?
我需要复制一个(有序的,不是关联的)对象数组。我用的是jQuery。我最初尝试过
jquery.extend({}, myArray)
但是,自然地,这给了我一个对象,我需要一个数组(真的爱jquery。顺便说一下,延伸)。
复制数组的最佳方法是什么?
当前回答
我知道你正在寻找一个数组的“深度”副本,但如果你只有一个单层数组,你可以使用这个:
复制一个原生JS数组很容易。使用array. slice()方法创建数组的部分或全部副本。
var foo = ['a','b','c','d','e'];
var bar = foo.slice();
foo和bar是a b c d e的5个数组
当然,酒吧是一个拷贝,而不是一个参考…所以如果你接下来做这个…
bar.push('f');
alert('foo:' + foo.join(', '));
alert('bar:' + bar.join(', '));
你现在会得到:
foo:a, b, c, d, e
bar:a, b, c, d, e, f
其他回答
美元。Extend (true, [], [['a', ['c']], 'b'])
这应该对你有帮助。
如果你想使用纯JavaScript,那么试试这个:
var arr=["apple","ball","cat","dog"];
var narr=[];
for(var i=0;i<arr.length;i++){
narr.push(arr[i]);
}
alert(narr); //output: apple,ball,vat,dog
narr.push("elephant");
alert(arr); // output: apple,ball,vat,dog
alert(narr); // apple,ball,vat,dog,elephant
我知道你正在寻找一个数组的“深度”副本,但如果你只有一个单层数组,你可以使用这个:
复制一个原生JS数组很容易。使用array. slice()方法创建数组的部分或全部副本。
var foo = ['a','b','c','d','e'];
var bar = foo.slice();
foo和bar是a b c d e的5个数组
当然,酒吧是一个拷贝,而不是一个参考…所以如果你接下来做这个…
bar.push('f');
alert('foo:' + foo.join(', '));
alert('bar:' + bar.join(', '));
你现在会得到:
foo:a, b, c, d, e
bar:a, b, c, d, e, f
我遇到过这个“深度对象复制”函数,我发现它可以方便地按值复制对象。它没有使用jQuery,但它确实很有深度。
http://www.overset.com/2007/07/11/javascript-recursive-object-copy-deep-object-copy-pass-by-value/
那么复杂类型呢? 当数组包含对象时…或者其他
我的版本:
Object.prototype.copy = function(){
var v_newObj = {};
for(v_i in this)
v_newObj[v_i] = (typeof this[v_i]).contains(/^(array|object)$/) ? this[v_i].copy() : this[v_i];
return v_newObj;
}
Array.prototype.copy = function(){
var v_newArr = [];
this.each(function(v_i){
v_newArr.push((typeof v_i).contains(/^(array|object)$/) ? v_i.copy() : v_i);
});
return v_newArr;
}
这不是最终版本,只是一个想法。
PS:每个方法和包含的都是原型也。