(深)使用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

上一篇: (Deep) copying an array using jQuery

下一篇: Difference between JSON.stringify and JSON.parse