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

时间:2010-09-23 04:37:14

标签: javascript jquery arrays clone

这是我的代码:

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

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

8 个答案:

答案 0 :(得分:152)

只需使用Array.prototype.slice

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

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

答案 1 :(得分:10)

jQuery.merge怎么样?

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

答案 2 :(得分: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;
}

-ConroyP

一个很好的选择是

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

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

-John Resig

检查类似帖子

答案 3 :(得分:5)

我就是这样做的:

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

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

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

答案 4 :(得分:1)

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]​

答案 5 :(得分:1)

另一种选择是使用Array.concat:

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

答案 6 :(得分:0)

var a=[1,2,3]
b=JSON.parse(JSON.stringify(a));
document.getElementById("demo").innerHTML = b;
<p id="demo"></p>

答案 7 :(得分:0)

ES6 请使用传播

let arrayCopy = [...myArray];