[1,2,3]
最简单的(单行?)方法是{1:0, 2:0, 3:0}
什么?
更新:我宁愿做更多的“功能风格”(一行,each
或map
等)
数组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; }, {});
var arr = [1,2,3];
var result = {};
for (var i=0, l=arr.length; i<l;i++) {
result[arr[i]] = 0;
}
如果您只想将数组转换为键/值对象,并将所有值设置为 0(如您的示例中所示),那么您可以使用:
var hash = {};
[1,2,3].forEach(function(item) {
hash[item] = 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);
出于好奇,我根据工程师的回答运行了这个函数,它的速度是原来的两倍!
即使这违反了大多数最佳实践,但这似乎很整洁,最重要的是,单线
var foo = [1,2,3];
foo = eval('({' + foo.join(':0, ') + ':0 })' );
console.log( foo ); // Object {1=0, 2=0, 3=0}