zjm1126
zjm1126

Reputation: 35662

Is there a method to clone an array in jQuery?

This is my code :

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

Doesn't jQuery have a 'clone' method? How can I clone an array using jQuery?

Upvotes: 64

Views: 85436

Answers (8)

meder omuraliev
meder omuraliev

Reputation: 186562

Just use Array.prototype.slice.

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

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

Upvotes: 166

zloctb
zloctb

Reputation: 11177

ES6 Please use spread

let arrayCopy = [...myArray];

Upvotes: 2

Pradeep Kumar
Pradeep Kumar

Reputation: 31

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

Upvotes: 0

astgtciv
astgtciv

Reputation: 770

What about the jQuery.merge ?

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

Upvotes: 11

Chtioui Malek
Chtioui Malek

Reputation: 11515

This is how i've done it :

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

this will create a new deep copy not related to the first one (not a shallow copy).

also this obviously will not clone events and functions, but the good thing you can do it in one line and it can be used for any king of object (arrays, strings, numbers, objects ...)

Upvotes: 7

Reigel Gallarde
Reigel Gallarde

Reputation: 65264

try

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;
    }​
}

use as

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

Upvotes: 1

Mike Ratcliffe
Mike Ratcliffe

Reputation: 29

Another option is to use Array.concat:

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

Upvotes: 1

Pramendra Gupta
Pramendra Gupta

Reputation: 14873

Change

b=$.clone(a) to b=$(this).clone(a) but it some time dont work

but is reported

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

Solution you use simple inbuilt clone function of 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

A great alternative is

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

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

-John Resig

Check similar post

Upvotes: 7

Related Questions