如何从数组创建哈希

时间:2012-12-18 14:40:03

标签: javascript

[1,2,3]转换为{1:0, 2:0, 3:0}的最简单(一行?)方法是什么?

更新:我更愿意这样做“功能风格”(一行,eachmap等)

5 个答案:

答案 0 :(得分:4)

Array reduce方法允许将第二个参数initialValue传递给该方法。您可以将对象作为initialValue发送,并通过迭代继续返回,将具有键集的属性分配给当前的数组项。请注意类型强制,属性键必须是JavaScript中的字符串。因此,在这种情况下,将对数组项调用toString方法。

var hash = array.reduce(function(obj,cur){
   obj[cur]=0;
   return obj;
},{});

demo

以一个班轮的形式:

var hash = array.reduce(function (obj, cur) { obj[cur] = 0; return obj; }, {});

答案 1 :(得分:0)

var arr = [1,2,3];

var result = {};
for (var i=0, l=arr.length; i<l;i++) {
    result[arr[i]] = 0;
}

答案 2 :(得分:0)

如果您只想将数组转换为键/值对象,并将所有值设置为0(如示例所示),则可以使用:

var hash = {};
[1,2,3].forEach(function(item) {
  hash[item] = 0;
});

答案 3 :(得分:0)

就我个人而言,我没有看到编码所需内容有什么问题:

function objectWithKeysAndValue(keys, value)
{
    var o = {};

    for (var i = 0, n = keys.length; i != n; ++i) {
        o[keys[i]] = value;
    }

    return o;
}

console.log(objectWithKeysAndValue([1,2,3], 0);

出于好奇,我根据工程师的回答运行了这个功能,它的速度提高了一倍!

Results

答案 4 :(得分:0)

即使这是针对大多数最佳做法,但这似乎是最简单的,单行

var foo = [1,2,3];

foo = eval('({' + foo.join(':0, ') + ':0 })' );

console.log( foo ); // Object {1=0, 2=0, 3=0}