2012-02-27 131 views
8

可能重复:
Convert flat array [k1,v1,k2,v2] to object {k1:v1,k2:v2} in JavaScript?功能到一个数组转换为一个关联数组

我想一个数组转换为JavaScript中关联数组。

例如,假设下面的输入,

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

我想下一个关联数组作为输出:

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

我怎么能这样做?

+3

你是指对象?你想让数组成员成为键或值吗? – 2012-02-27 13:16:34

+0

嗯......这是一个关联数组,但使用数字如键。它类似于:'{1:'a',2:'b',3:'c',4:'d'}' – 2012-02-27 13:17:30

+0

是的。确切地说,我希望他们作为key =>值对 – 2012-02-27 13:17:38

回答

15

使用.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

不错,我不知道array.forEach()。它是否适用于所有浏览器? – gintas 2012-02-27 13:23:58

+1

@gintas:只在那些支持ES5的。但是你可以很容易地提供你自己的实现。 – 2012-02-27 13:24:36

+0

哦,那太好了。但是你在做JSON.stringify(obj_a); ? – 2012-02-27 13:25:07

6

尝试以下操作:

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

'a.length'就足够了,因为无论如何你都会跳过2步。 – pimvdb 2012-02-27 13:21:59

+0

@pimvdb这样做会不正确 - 考虑一个长度为1的数组... – 2012-02-27 13:23:34

+0

@ rich.okelly然后它会是'{'a':undefined}',这可能比忘记密钥更好。 – 2012-02-27 13:24:17

2

有作为关联数组没有这样的事,他们是所谓的Object秒,但这样做几乎同样的:-)

下面是你将如何做转换

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; 
    } 
}