有没有一种方法克隆jQuery中的数组?

这是我的代码:

var a=[1,2,3] b=$.clone(a) alert(b) 

不jQuery有一个“克隆”方法? 我怎样才能克隆一个数组使用jQuery?

只要使用Array.prototype.slice

 a = [1]; b = a.slice(); 

JSFiddle – http://jsfiddle.net/neoswf/ebuk5/

那jQuery.merge呢?

 copy = $.merge([], a); 

更改

b = $。克隆(a)b = $(this).clone(a),但它有一段时间不工作

但有报道

http://www.fusioncube.net/index.php/jquery-clone-bug-in-internet-explorer

解决scheme您使用JavaScript的简单的内置克隆function

 var a=[1,2,3]; b=clone(a); alert(b); function clone(obj){ if(obj == null || typeof(obj) != 'object') return obj; var temp = obj.constructor(); for(var key in obj) temp[key] = clone(obj[key]); return temp; } 

-ConroyP

一个很好的select是

  // Shallow copy var b = jQuery.extend({}, a); // Deep copy var b = jQuery.extend(true, {}, a); 

– 约翰Resig

检查类似的post

  • 什么是在JavaScript中深入克隆对象的最有效方法?

我是这样做的:

 var newArray = JSON.parse(JSON.stringify(orgArray)); 

这将创build一个与第一个不相关的新的深层副本(不是浅拷贝)。

这也显然不会克隆事件和函数,但好东西你可以在一行中做到这一点,它可以用于任何对象的国王(数组,string,数字,对象…)

另一种select是使用Array.concat:

 var a=[1,2,3] var b=[].concat(a); 

尝试

 if (!Array.prototype.clone) { Array.prototype.clone = function () { var arr1 = new Array(); for (var property in this) { arr1[property] = typeof (this[property]) == 'object' ? this[property].clone() : this[property] } return arr1; }​ } 

用于

 var a = [1, 2, 3] b = a; a.push(4) alert(b); // alerts [1,2,3,4] //---------------/// var a = [1, 2, 3] b = a.clone(); a.push(4) alert(b); // alerts [1,2,3]​ 
 var a=[1,2,3] b=JSON.parse(JSON.stringify(a)); document.getElementById("demo").innerHTML = b; 
 <p id="demo"></p>