mor*_*des 210 javascript jquery
可能重复:
克隆JavaScript对象的最有效方法是什么?
我需要复制一个(有序的,非关联的)对象数组.我正在使用jQuery.我最初尝试过
jquery.extend({}, myArray)
Run Code Online (Sandbox Code Playgroud)
但是,当然,这给了我一个对象,我需要一个数组(顺便说一句,真的很喜欢jquery.extend).
那么,复制数组的最佳方法是什么?
Noa*_*man 280
由于Array.slice()不进行深度复制,因此它不适用于多维数组:
var a =[[1], [2], [3]];
var b = a.slice();
b.shift().shift();
// a is now [[], [2], [3]]
Run Code Online (Sandbox Code Playgroud)
请注意,虽然我已经在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]]
Run Code Online (Sandbox Code Playgroud)
scu*_*ffe 20
我意识到你正在寻找一个数组的"深层"副本,但如果你只有一个单级数组,你可以使用它:
复制本机JS数组很容易.使用Array.slice()方法创建部分/全部数组的副本.
var foo = ['a','b','c','d','e'];
var bar = foo.slice();
Run Code Online (Sandbox Code Playgroud)
现在foo和bar是'a','b','c','d','e'的5个成员数组
当然吧是副本,而不是参考...所以如果你接下来这样做...
bar.push('f');
alert('foo:' + foo.join(', '));
alert('bar:' + bar.join(', '));
Run Code Online (Sandbox Code Playgroud)
你现在会得到:
foo:a, b, c, d, e
bar:a, b, c, d, e, f
Run Code Online (Sandbox Code Playgroud)
小智 13
JavaScript中的所有内容都是通过引用传递的,所以如果你想要一个真正的数组中对象的深层副本,我能想到的最好的方法是将整个数组序列化为JSON,然后将其反序列化.
小智 7
如果你想使用纯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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
118915 次 |
| 最近记录: |