Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Clone Multidimensional Array in javascript

I want to make a clone of multidimensional Array so that i can play arround with the clone array without affecting main Array.

I'm using following function to do so:

Array.prototype.clone = function () { 
   var newArray = new Array(this.length);
     for(var i=0; i < this.length; i++ ){
        newArray[i] = this[i];
   }
   return newArray;
};

But problem which is since it is using array prototype so it will clone my all array.so can any body tell me what is the best way of doing this.

like image 301
Abhimanyu Avatar asked Dec 03 '22 13:12

Abhimanyu


1 Answers

You need to use recursion

var a = [1,2,[3,4,[5,6]]];

Array.prototype.clone = function() {
    var arr = [];
    for( var i = 0; i < this.length; i++ ) {
//      if( this[i].constructor == this.constructor ) {
        if( this[i].clone ) {
            //recursion
            arr[i] = this[i].clone();
            break;
        }
        arr[i] = this[i];
    }
    return arr;
}

var b = a.clone()

console.log(a);
console.log(b);

b[2][0] = 'a';

console.log(a);
console.log(b);

/*
[1, 2, [3, 4, [5, 6]]]
[1, 2, [3, 4, [5, 6]]]
[1, 2, [3, 4, [5, 6]]]
[1, 2, ["a", 4, [5, 6]]]
*/

Any other objects in the original array will be copied by reference though

like image 138
meouw Avatar answered Dec 24 '22 22:12

meouw