有没有一种方法可以在jQuery中克隆数组?

zjm*_*126 60 javascript arrays jquery clone

这是我的代码:

var a=[1,2,3]
b=$.clone(a)
alert(b)
Run Code Online (Sandbox Code Playgroud)

jQuery没有'克隆'方法吗?如何使用jQuery克隆数组?

med*_*iev 153

只是用Array.prototype.slice.

a = [1];
b = a.slice();
Run Code Online (Sandbox Code Playgroud)

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

  • 请注意:这样做*浅*副本.不是很深的副本.因此,不会复制数组中的任何对象,只需引用它们. (12认同)
  • 谢谢你........唯一需要注意的是,Arrays是对象,所以你可以附加属性和方法......比如`var a = [1,2,3]; a.foo = function(){alert(this); ``使用`slice()`任何附加的属性和方法都不会被复制,所以你不能做`b.foo()`...我只提起它,因为jQuery的`.clone()`包括深拷贝选项.例如:http://jsfiddle.net/B2LQL/ ..........但在这个问题的背景下,这几乎是一个极端情况. (7认同)

Cht*_*lek 7

这就是我做到的方式:

var newArray = JSON.parse(JSON.stringify(orgArray));
Run Code Online (Sandbox Code Playgroud)

这将创建一个与第一个无关的新深拷贝(不是浅拷贝).

这显然也不会克隆事件和函数,但你可以在一行中做到这一点,它可以用于任何对象之王(数组,字符串,数字,对象......)


Pra*_*pta 6

更改

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;
}
Run Code Online (Sandbox Code Playgroud)

-ConroyP

一个很好的选择是

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

  // Deep copy
  var b = jQuery.extend(true, {}, a);
Run Code Online (Sandbox Code Playgroud)

-John Resig

检查类似的帖子

  • Japan- Extend适用于Objects.Ur first func也适用于Object. (2认同)