2

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

更新:我宁愿做更多的“功能风格”(一行,eachmap等)

4

5 回答 5

4

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

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

演示

以一个班轮的形式:

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

于 2012-12-18T14:48:48.417 回答
0
var arr = [1,2,3];

var result = {};
for (var i=0, l=arr.length; i<l;i++) {
    result[arr[i]] = 0;
}
于 2012-12-18T14:45:50.630 回答
0

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

var hash = {};
[1,2,3].forEach(function(item) {
  hash[item] = 0;
});
于 2012-12-18T14:48:09.233 回答
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);

出于好奇,我根据工程师的回答运行了这个函数,它的速度是原来的两倍!

结果

于 2012-12-18T14:48:59.703 回答
0

即使这违反了大多数最佳实践,但这似乎很整洁,最重要的是,单线

var foo = [1,2,3];

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

console.log( foo ); // Object {1=0, 2=0, 3=0}
于 2012-12-18T14:56:21.793 回答