2013-08-01 1 views
1

Ce code simple fonctionne pour les tableaux d'une dimension, mais pas pour les multidimensionnels:ne peut pas dupliquer tableau multidimensionnel

var a=[[0,0,0],[0,0,0],[0,0,0]]; 
var b=a.slice(0); 

a[0][0]=2; 

alert(b[0][0]);//Should display 0, but displays 2 

http://jsfiddle.net/e2vFk/3

Comment puis-je dupliquer un tableau multidimensionnel?

EDIT: Pour cet exemple, la dimension est 2, mais la dimension de mon tableau réel est 4

+0

La profondeur réelle est-elle toujours '4' ou peut-elle varier? –

+0

@CrazyTrain C'est toujours 4, mais c'est mieux si la réponse n'est pas spécifique à cette dimension. – Mageek

Répondre

2

Voici une solution générique, qui fonctionnera pour n'importe quelle profondeur, et suppose que vos tableaux sont en fait des tableaux, et non des objets de type tableau.

function clone(arr) { 
    arr = arr.slice() 
    for (var i = 0; i < arr.length; i++) 
     if (Array.isArray(arr[i])) 
      arr[i] = clone(arr[i]) 
    return arr 
} 

La méthode Array.isArray peut être calées si nécessaire pour les anciens navigateurs.

if (!Array.isArray) { 
    Array.isArray = function(arr) { 
     return Object.prototype.toString.call(arr) === "[object Array]" 
    } 
} 

function clone(arr) { 
    return arr.map(function(item) { 
     if (Array.isArray(item)) 
      return clone(item) 
     return item 
    }) 
} 

est ici une solution qui utilise à la place .map().

1
var b=a.map(function(arr) { return arr.slice(); }); 
+0

Désolé, j'ai oublié de mentionner quelque chose, voir mon édition. – Mageek

0

vous ne dupliquez les références .. utiliser une boucle

var a=[[0,0,0],[0,0,0],[0,0,0]]; 
var b= new Array() 
for(i=0;i<a.length;i++) 
    b[i]=a[i].slice(0); 



a[0][0] = 2 

alert(b[0][0]); 
alert(a[0][0]); 
+0

Désolé, j'ai oublié de mentionner quelque chose, voir mon édition. – Mageek

1

meilleure façon de faire un clone est

function clone(array){ 
    return JSON.parse(JSON.stringify(array)); 
} 

Works pour tout/toute dimension, sauf si vous avez des fonctions et des variables circulaires.

Questions connexes