这是我的代码:
var a=[1,2,3]
b=$.clone(a)
alert(b)
jQuery没有'clone'方法吗?我该如何使用jQuery克隆一个数组?
这是我的代码:
var a=[1,2,3]
b=$.clone(a)
alert(b)
jQuery没有'clone'方法吗?我该如何使用jQuery克隆一个数组?
slice(0)
是同义词吗? - Peter Ajtaivar a=[1,2,3]; a.foo = function() { alert(this); };
使用slice()
复制时,不会复制任何附加的属性和方法,所以您不能执行b.foo()
...我提及这一点是因为jQuery的.clone()
包括深层复制选项。例如:http://jsfiddle.net/B2LQL/......但在这个问题的背景下,这几乎是一个小角落的情况。 - Peter Ajtai那么 jQuery.merge 呢?
copy = $.merge([], a);
更改
b=$.clone(a) 改为 b=$(this).clone(a) ,但有时候不起作用。
但是已经有人报告过这个问题了。
http://www.fusioncube.net/index.php/jquery-clone-bug-in-internet-explorer
解决方案 您可以使用 JavaScript 中内置的简单克隆函数。
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;
}
一个很好的选择是
// Shallow copy
var b = jQuery.extend({}, a);
// Deep copy
var b = jQuery.extend(true, {}, a);
-约翰·雷西格(John Resig)
查看类似的帖子
我是这样做的:
var newArray = JSON.parse(JSON.stringify(orgArray));
这将创建一个新的深拷贝,与第一个不相关(不是浅拷贝)。
此外,显然这不会克隆事件和函数,但好处是你可以在一行代码中完成,并且可用于任何类型的对象(数组、字符串、数字、对象等)。
ES6 请使用展开运算符
let arrayCopy = [...myArray];
尝试
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]
slice(0)
)? - Peter Ajtai另一个选项是使用Array.concat:
var a=[1,2,3]
var b=[].concat(a);
var a=[1,2,3]
b=JSON.parse(JSON.stringify(a));
document.getElementById("demo").innerHTML = b;
<p id="demo"></p>