2012-03-26 7 views
18

Aquí está el ejemplo de lo que estoy haciendo:Javascript matriz dentro Array - ¿Cómo puedo llamar niño nombre de la matriz

var size = new Array("S", "M", "L", "XL", "XXL"); 
    var color = new Array("Red", "Blue", "Green", "White", "Black"); 
    var options = new Array(size, color); 

que estoy haciendo una selección de bucle thingies de forma que funcionan bien, pero quiero a buscar el nombre del niño Array, en este caso, tamaño o color. Cuando estoy alerta (opciones [0]) obtengo todos los elementos de la matriz, pero para algunos casos específicos, quiero obtener solo el nombre de la matriz, que es el tamaño/color que ya dije. ¿Hay forma de lograr eso? Gracias

+5

No use la nueva matriz, utilice [] en su lugar. – antonjs

+0

y por qué es eso :)? – Malyo

+0

aquí la diferencia por cierto '[]' y 'new Array' http://stackoverflow.com/questions/931872/whats-the-difference-between-array-and-while-declaring-a-javascript-ar/1273936# 1273936 – antonjs

Respuesta

22

me gustaría crear un objeto como éste:

var options = { 
    size: ["S", "M", "L", "XL", "XXL"], 
    color: ["Red", "Blue", "Green", "White", "Black"] 
}; 


alert(Object.keys(options)); 

Para tener acceso a las claves individualy:

for (var key in options) { 
    alert(key); 
} 

PD: cuando se crea un nuevo objeto de matriz no utilizan new Array uso [] en lugar.

+0

Funciona un poco , pero muestra todos los nombres, ¿cómo puedo acceder a ellos individualmente? (lo quiero dentro del ciclo después) – Malyo

+0

Simplemente ejecute este código: 'para (tecla var en opciones) { alerta (clave); } ' – antonjs

+0

MDN (Mozilla) sugiere que para no se debe utilizar en matrices:" for..in no se debe usar para iterar sobre una matriz donde el orden de los índices es importante. Los índices de matriz son simplemente propiedades enumerables con nombres enteros y son de lo contrario, idéntico a las propiedades generales del Objeto ". - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in – rpeg

2

No hay forma de saber que los dos miembros de la matriz options provienen de las variables llamadas size y color.

Tampoco son necesariamente llamadas así exclusivamente, cualquier variable también podría apuntar a esa matriz.

var notSize = size; 

console.log(options[0]); // It is `size` or `notSize`? 

Una cosa que puedes hacer es usar un objeto allí en vez ...

var options = { 
    size: size, 
    color: color 
} 

entonces se podría acceder options.size o options.color.

2

No puede. La matriz no tiene un nombre.

Usted acaba de tener dos referencias a la matriz, una en la variable y otra en la tercera matriz.

No hay forma de encontrar todas las referencias que existen para un objeto dado.

Si el nombre es importante, guárdelo con los datos.

var size = { data: ["S", "M", "L", "XL", "XXL"], name: 'size' }; 
var color = { data: ["Red", "Blue", "Green", "White", "Black"], name: 'color' }; 
var options = [size, color]; 

Obviamente tendrá que modificar el código existente que accede a los datos (ya que ahora tienen options[0].data[0] en lugar de options[0][0] pero también tiene options[0].name).

+0

'no hay forma de encontrar todas las referencias que existen' - parece incorrecto, lo siento, Quentin. Puede recorrer las propiedades de un objeto para ver qué hay allí. – dmp

+1

@danp - Tendría que recorrer * cada * objeto, incluidos los que estaban envueltos en cierres. Suponiendo que este código esté en una función, no conozco ninguna forma de encontrar todas las variables declaradas en él (si no fuera así, 'var color' debería aparecer como' window.color') – Quentin

1

Sí lo es. Puede utilizar

alert(options[0][0]) 

para obtener el tamaño "S"

o

alert(options[0][1]) 

para obtener el color "Rojo"

0

En ese caso usted no desea inserte size y color dentro de una matriz, pero en un objeto

var options = { 
    'size': size, 
    'color': color 
    }; 

Después se puede acceder a los juegos de llaves por

var keys = Object.keys(options); 
1

Usted ha hecho una matriz de matrices multidimensionales(), por lo que las opciones [0] en este caso es la matriz de tamaño. necesita hacer referencia al primer elemento del niño, que para usted es: opciones [0] [0].

Si desea recorrer todas las entradas, puede usar la sintaxis for .. in ... que se describe en here.

var a = [1,2,4,5,120,12]; 
for (var val in t) { 
    console.log(t[val]); 
} 

var b = ['S','M','L']; 
var both = [a,b]; 

for (var val in both) { 
    for(val2 in both[val]){console.log(both[val][val2])} 
} 
5

usted puede conseguir usando key valor de algo como esto:

var size = new Array("S", "M", "L", "XL", "XXL"); 
var color = new Array("Red", "Blue", "Green", "White", "Black"); 
var options = new Array(size, color); 

var len = options.length; 
for(var i = 0; i<len; i++) 
{ 
for(var key in options[i]) 
    { 
     alert(options[i][key]) 
    } 

} 

ver aquí: http://jsfiddle.net/8hmRk/8/

+0

Bueno, su ejemplo no funciona mate, alerta a todos los valores de la matriz de matriz, no al array array name – Malyo

0

array es igual que cualquier otro objeto. Puede darle un nombre si lo desea.

var size = new Array("S", "M", "L", "XL", "XXL"); 
var color = new Array("Red", "Blue", "Green", "White", "Black"); 
var options = new Array(size, color); 
color.name = "color"; 
size.name = "size"; 
options[0].name == "size" 
>true 
Cuestiones relacionadas