可能是重复的问题:
如何在JavaScript中将平面数组[k1,v1,k2,v2]转换为对象{k1:v1,k2:v2}?
我想在JavaScript中将一个数组转换为关联数组。
例如,给定以下输入:
var a = ['a', 'b', 'c', 'd'];
我希望能够获得下一个关联数组作为输出:
{'a' : 'b', 'c' : 'd'}
我该怎么做呢?
可能是重复的问题:
如何在JavaScript中将平面数组[k1,v1,k2,v2]转换为对象{k1:v1,k2:v2}?
我想在JavaScript中将一个数组转换为关联数组。
例如,给定以下输入:
var a = ['a', 'b', 'c', 'd'];
{'a' : 'b', 'c' : 'd'}
我该怎么做呢?
使用.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"}
.forEach
#Compatibility。我使用 JSON.stringify
作为一种快速检查对象是否包含所需名称-键对的方法。 - Rob W请尝试以下操作:
var obj = {};
for (var i = 0, length = a.length; i < length; i += 2) {
obj[a[i]] = a[i+1];
}
{'a': undefined}
,这样比忘记键值要好。 - Rob Wif (obj["foo"])...
或者 if ("foo" in obj)...
这样的存在性检查,因为这些检查也会检测到在 obj
的原型上找到的字段(以 if ("toString" in obj)...
作为例子)。为了保险起见,请使用 obj.hasOwnProperty("foo")
- 这可以确保不会检查原型。 - Alexander Pavlov没有关联数组这样的东西,它们被称为对象
但基本上做的是相同的事情 :-)
以下是如何进行转换的方法
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;
}
}