(深)使用jQuery复制数组
可能重复:
什么是克隆JavaScript对象最有效的方法?
我需要复制一个(有序的,不关联的)对象数组。 我正在使用jQuery。 我最初尝试过
jquery.extend({}, myArray)
但是,自然,这给了我一个对象,我需要一个数组(真的很喜欢jquery.extend,顺便说一下)。
那么,复制数组的最佳方式是什么?
由于Array.slice()不执行深度复制,因此它不适用于多维数组:
var a =[[1], [2], [3]];
var b = a.slice();
b.shift().shift();
// a is now [[], [2], [3]]
注意,虽然我已经使用shift().shift()
的上方,该点就是这样b[0][0]
包含一个指向a[0][0]
而不是一个值。
同样, delete(b[0][0])
也会导致删除a[0][0]
,并且b[0][0]=99
也会a[0][0]
的值更改为99。
当一个真值作为初始参数传递时,jQuery的extend
方法会执行深层复制:
var a =[[1], [2], [3]];
var b = $.extend(true, [], a);
b.shift().shift();
// a is still [[1], [2], [3]]
$.extend(true, [], [['a', ['c']], 'b'])
这应该为你做。
我意识到你正在寻找一个数组的“深层”副本,但如果你只有一个级别的数组,你可以使用这个:
复制本地JS Array非常简单。 使用Array.slice()方法创建数组的一部分/全部副本。
var foo = ['a','b','c','d','e'];
var bar = foo.slice();
现在foo和bar是'a','b','c','d','e'
当然,酒吧是一个副本,而不是一个参考...所以如果你接下来做了这个...
bar.push('f');
alert('foo:' + foo.join(', '));
alert('bar:' + bar.join(', '));
你现在会得到:
foo:a, b, c, d, e
bar:a, b, c, d, e, f
链接地址: http://www.djcxy.com/p/6933.html