2012-02-27 27 views
8

thể trùng lặp:
Convert flat array [k1,v1,k2,v2] to object {k1:v1,k2:v2} in JavaScript?Chức năng để chuyển đổi một mảng cho một mảng Associative

Tôi muốn chuyển đổi một mảng cho một mảng kết hợp trong JavaScript.

Ví dụ, với đầu vào sau,

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

Tôi muốn để có được những mảng kết hợp tiếp theo là đầu ra:

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

Làm thế nào tôi có thể làm điều đó?

+3

Bạn muốn nói đến một chiếc Object? Bạn có muốn các thành viên mảng là các khóa hoặc giá trị không? –

+0

Vâng ... Đó là một mảng kết hợp, nhưng sử dụng số như khóa. Nó tương tự như: '{1: 'a', 2: 'b', 3: 'c', 4: 'd'}' –

+0

Có. Chính xác, tôi muốn chúng như là một cặp khóa => giá trị của –

Trả lời

15

Sử dụng .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

Tốt, tôi không biết về array.forEach(). Nó có hoạt động trên tất cả các trình duyệt không? – gintas

+1

@gintas: Chỉ hỗ trợ ES5. Nhưng bạn có thể dễ dàng cung cấp việc triển khai của riêng bạn. –

+0

Ohh thats great. Nhưng bạn đang làm JSON.stringify (obj_a); ? –

6

Hãy thử như sau:

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

'a.length' sẽ là đủ kể từ khi bạn nhảy theo các bước 2. – pimvdb

+0

@pimvdb Làm như vậy sẽ không chính xác - xem xét một mảng chiều dài 1 ... –

+0

@ rich.okelly Sau đó, nó sẽ là '{'a': undefined}', mà có lẽ tốt hơn là quên chìa khóa. –

2

Không có những điều như một mảng kết hợp, chúng được gọi Object s nhưng làm khá nhiều :-) cùng

Dưới đây là cách bạn thực hiện chuyển đổi

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; 
    } 
} 
Các vấn đề liên quan