2012-02-27 24 views
8

Duplicar posible:
Convert flat array [k1,v1,k2,v2] to object {k1:v1,k2:v2} in JavaScript?función para convertir una matriz a una matriz asociativa

Quiero cambiar una matriz a una matriz asociativa en JavaScript.

Por ejemplo, dada la siguiente entrada,

var a = ['a', 'b', 'c', 'd']; 

Quiero conseguir la siguiente matriz asociativa como salida:

{'a' : 'b', 'c' : 'd'} 

¿Cómo puedo hacer eso?

+3

¿Quieres decir un objeto? ¿Desea que los miembros de la matriz sean las claves o los valores? –

+0

Bueno ... Es una matriz asociativa, pero usa un número como clave. Es similar a: '{1: 'a', 2: 'b', 3: 'c', 4: 'd'}' –

+0

Sí. Exactamente, los quiero como clave => par de valor –

Respuesta

15

Usando .forEach:

var a = ['a', 'b', 'c', 'd']; 
var obj_a = {}; 
a.forEach(function(val, i) { 
    if (i % 2 === 1) return; // Skip all even elements (= odd indexes) 
    obj_a[val] = a[i + 1]; // Assign the next element as a value of the object, 
          // using the current value as key 
}); 
// Test output: 
JSON.stringify(obj_a);  // {"a":"b","c":"d"} 
+0

Bien, no sabía sobre array.forEach(). ¿Funciona en todos los navegadores? – gintas

+1

@gintas: Solo en los que admiten ES5. Pero puede proporcionar fácilmente su propia implementación. –

+0

Ohh eso es genial. Pero estás haciendo JSON.stringify (obj_a); ? –

6

intente lo siguiente:

var obj = {}; 
for (var i = 0, length = a.length; i < length; i += 2) { 
    obj[a[i]] = a[i+1]; 
} 
+1

'a.length' sería suficiente ya que de todos modos saltas en pasos de 2. – pimvdb

+0

@pimvdb Hacer esto sería incorrecto, considere una matriz de longitud 1 ... –

+0

@ rich.okelly Entonces sería '{'a': undefined}', que probablemente sea mejor que olvidar la clave. –

2

No hay tal cosa como una matriz asociativa, se llaman Object s, pero lo hacen más o menos lo mismo :-)

Así es como harías la conversión

var obj = {}; // "associative array" or Object 
var a = ['a', 'b', 'c', 'd']; 
for(index in a) { 
    if (index % 2 == 0) { 
     var key = a[index]; 
     var val = a[index+1]; 
     obj[key] = val; 
    } 
} 
Cuestiones relacionadas