2012-02-27 13 views
8

Powiel możliwe:
Convert flat array [k1,v1,k2,v2] to object {k1:v1,k2:v2} in JavaScript?Funkcja konwersji tablicy do tablicy asocjacyjnej

chcę przekonwertować tablicy do tablicy asocjacyjnej w JavaScript.

Na przykład, biorąc pod uwagę co następuje wejście,

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

Chcę dostać następną tablicę asocjacyjną jako wyjście:

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

W jaki sposób można to zrobić?

+3

Masz na myśli obiekt? Czy chcesz, aby członkowie tablicy byli kluczami lub wartościami? –

+0

Cóż ... Jest to tablica asocjacyjna, ale wykorzystuje numer jak klucz. Jest podobny do: '{1: 'a', 2: 'b', 3: 'c', 4: 'd'}' –

+0

Tak. Dokładnie, chcę je jako klucz = wartość pary wartości –

Odpowiedz

15

Korzystanie .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

Miło, nie wiedziałem o array.forEach(). Czy działa we wszystkich przeglądarkach? – gintas

+1

@gintas: Tylko w obsługujących ES5. Ale możesz łatwo zapewnić własną implementację. –

+0

Ohh to świetnie. Ale robisz JSON.stringify (obj_a); ? –

6

Spróbuj wykonać następujące czynności:

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

'a.length' będzie wystarczające, ponieważ skaczesz mimo to w krokach 2. – pimvdb

+0

@pimvdb Czynienie tego byłoby niepoprawne - rozważ tablicę o długości 1 ... –

+0

@ rich.okelly Wtedy będzie to '{'a': undefined}', co jest prawdopodobnie lepsze niż zapomnienie klucza. –

2

Nie ma czegoś takiego jak asocjacyjnej, są one nazywane Object s ale zrobić niemal tak samo :-)

Oto, jak wykonać konwersję:

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; 
    } 
} 
Powiązane problemy