2017-08-31 10 views
-4

Ils contiennent tous les deux les mêmes valeurs, mais je me demande pourquoi ils sont différents quand je les console dans les outils de développement.Pourquoi la syntaxe est-elle différente entre ces deux tableaux dans JS?

enter image description here

var values = [6, 6, 6, 19, 13, 50]; 

function boxWidth() { 
    var widths = new Array(); 
    widths.push(values); 
    console.log(widths); 
    console.log(values); 
} 
+0

Pour clarifier les choses, vous vous demandez pourquoi 'widths' est' [Array (6)] '' mais values' est '[6,6,6,19,13,50 ] '? – Dai

+0

"* Ils contiennent tous deux les mêmes valeurs *" - eh bien non, ils ne le font pas. Cliquez sur le bouton inspecter (triangle gris) pour voir comment ils diffèrent. – Bergi

+0

Pour clarifier. l'un ressemble à -> '[6,6,6,19,13,50]' et l'autre ressemble à '[[6,6,6,19,13,50]]' si cela vous aide à voir la différence. – Keith

Répondre

5

Le tableau widths est un tableau qui a un seul élément faisant référence à la matrice values, alors que values est un tableau de 6 chiffres.

Pour copier les numéros dans individuellement, faites ceci:

widths.push(...values); 

Ou quand vous créez le tableau:

var widths = [...values]; 

ou à l'héritage compatible:

var widths = values.slice(); 

Vous pouvez sérialiser les tableaux pour obtenir une vue plus claire.

var values = [6, 6, 6, 19, 13, 50]; 
 

 
function boxWidth() { 
 
    var widths = new Array(); 
 
    widths.push(values); 
 
    console.log(JSON.stringify(widths)); 
 
    console.log(JSON.stringify(values)); 
 
} 
 

 
boxWidth();

+0

Merci, totalement comprendre maintenant. Était un peu confus. Je vois que j'avais un tableau dans un tableau, est-ce logique? –

+0

Oui, c'est exactement ce que vous avez eu. :-) – spanky

4

values est une matrice de dimension 1 contenant 6 chiffres.

widths est un tableau à deux dimensions. Sa première dimension est un élément unique, qui est une référence à values. La deuxième dimension est les 6 chiffres dans values.

console.log() affiche uniquement la première dimension en détail par défaut. Vous pouvez cliquer sur le triangle d'affichage widths pour voir le contenu de la dimension interne. Si vous le modifiez pour consigner JSON, vous verrez la structure complète de chacun. Ensuite, vous verrez le niveau supplémentaire d'imbrication dans widths.

var values = [6, 6, 6, 19, 13, 50]; 
 

 
function boxWidth() { 
 
    var widths = new Array(); 
 
    widths.push(values); 
 
    console.log(JSON.stringify(widths)); 
 
    console.log(JSON.stringify(values)); 
 
} 
 

 
boxWidth();

+0

C'est exactement ce que je viens de faire, merci d'avoir éclairci ça pour moi. –