将[1,2,3]
转换为{1:0, 2:0, 3:0}
的最简单(一行?)方法是什么?
更新:我更愿意这样做“功能风格”(一行,each
或map
等)
答案 0 :(得分:4)
Array 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; }, {});
答案 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);
出于好奇,我根据工程师的回答运行了这个功能,它的速度提高了一倍!
答案 4 :(得分:0)
即使这是针对大多数最佳做法,但这似乎是最简单的,单行
var foo = [1,2,3];
foo = eval('({' + foo.join(':0, ') + ':0 })' );
console.log( foo ); // Object {1=0, 2=0, 3=0}