Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从数组创建哈希_Javascript - Fatal编程技术网

Javascript 如何从数组创建哈希

Javascript 如何从数组创建哈希,javascript,Javascript,将[1,2,3]转换为{1:0,2:0,3:0}的最简单(一行?)方法是什么 更新:我更喜欢做更多的“功能性风格”(一行,每行或映射等)var arr=[1,2,3]; var result={}; 对于(var i=0,l=arr.length;ivar arr=[1,2,3]; var result={}; 对于(var i=0,l=arr.length;i如果您只想将数组转换为键/值对象,并且所有值都设置为0(如示例中所示),则可以使用: var hash = {}; [1,2,3].fo

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

更新:我更喜欢做更多的“功能性风格”(一行,每行
映射
等)

var arr=[1,2,3];
var result={};
对于(var i=0,l=arr.length;i
var arr=[1,2,3];
var result={};

对于(var i=0,l=arr.length;i如果您只想将数组转换为键/值对象,并且所有值都设置为0(如示例中所示),则可以使用:

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

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

var hash = {};
[1,2,3].forEach(function(item) {
  hash[item] = 0;
});
Array方法允许将第二个参数
initialValue
传递给该方法。您可以将对象作为initialValue发送,并在迭代过程中不断返回,将键集为的属性分配给数组的当前项。注意类型强制,属性键必须是JavaScript中的字符串。因此
toString
方法将被禁用在本例中对数组项调用

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

以一个衬垫的形式:

var hash=array.reduce(函数(obj,cur){obj[cur]=0;返回obj;},{});

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

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

以一个衬垫的形式:


var hash=array.reduce(函数(obj,cur){obj[cur]=0;返回obj;},{});

就个人而言,我看不出编写所需代码有什么问题:

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);
出于好奇,我对工程师的答案运行了这个函数,速度是工程师的两倍


就我个人而言,我不认为编写您需要的代码有什么问题:

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);
出于好奇,我对工程师的答案运行了这个函数,速度是工程师的两倍


即使这与大多数最佳实践背道而驰,但这似乎很简洁,而且最重要的是,这是一条单行线


即使这与大多数最佳实践背道而驰,但这似乎很整洁,而且最重要的是,这是一条简单的路线



没有
[1=>0,2=>0,3=>0]
谢谢:)这个问题仍然不正确。你正在考虑
{1:0,2:0,3:0}
对,再次修复(目前在Ruby和Javascript之间:)是解决这个问题的好地方。没有
[1=>0,2=>0,3=>0]
谢谢:)这个问题仍然不正确。您正在考虑
{1:0,2:0,3:0}
对,再次修复(目前位于Ruby和Javascript之间:)是解决这个问题的更好的地方。Neat,我更喜欢使用“函数式”(一行,每个
都有
映射
等)不要使用
循环数组。。。在
@Amberlamps中,这在这里是不相关的,因为数组中应该没有间隙。@杰克:这可能是真的,但是为什么不想保持代码的一致性呢?只要坚持使用
for(init;cond;inc)
过程即可。整洁,我更喜欢使用“功能性风格”(一行,每个
映射
等)不要使用
for循环数组。。。在
@Amberlamps中,这在这里是不相关的,因为数组中应该没有间隙。@杰克:这可能是真的,但是为什么不想保持代码的一致性呢?只要坚持使用
for(init;cond;inc)
过程就可以了。+1用于创造性,尽管根本不推荐此解决方案:)实际上,在这种情况下使用
eval
并没有任何真正的问题或危险。但总的来说,我同意。这或多或少是一个思想实验[因此,至少没有理由否决@anonymous]:衡量这种方法的性能,想想如果你有许多这样的数组,会发生什么,想想优化工具,它们将无法破坏数组中的变量eval@gryzzly例如我真的不明白你的意思。表演什么
eval
的闪电速度很快,
Array.prototype.join的闪电速度也很快。对于这个代码段来说,性能是最不差的。@jAndy
eval
的速度是已知的,对于所讨论的代码,速度要慢三倍——我喜欢你回答的创造性,但关于它不是一个真正问题的评论是我不能同意的。它的速度较慢,会干扰优化工具,而且更难阅读。+1对于创造性,尽管根本不推荐此解决方案:)实际上,在这种情况下使用
eval
,我看不到任何真正的问题或危险。但总的来说,我同意。这或多或少是一个思想实验[因此,至少没有理由否决@anonymous]:衡量这种方法的性能,想想如果你有许多这样的数组,会发生什么,想想优化工具,它们将无法破坏数组中的变量eval@gryzzly例如我真的不明白你的意思。表演什么
eval
的闪电速度很快,
Array.prototype.join的闪电速度也很快。对于这个代码段来说,性能是最不差的。@jAndy
eval
的速度是已知的,对于所讨论的代码,速度要慢三倍——我喜欢你回答的创造性,但关于它不是一个真正问题的评论是我不能同意的。它的速度较慢,会弄乱优化工具,而且更难阅读。@Engineer:按照您的逻辑,每一个尽可能大的脚本都是一行:)@gryzzly-Thx,以供详细解释。@Engineer当然可以。现在我意识到,当数组中的项不是唯一的时,这种方法将失败。@Amberlamps我明白你的意思。但在这种情况下,它是在liner上被批准的。@BreakPhreak对您来说可能很有趣。@Engineer:按照您的逻辑,每个尽可能大的脚本都是一行:)@gryzzly Thx,用于彻底解释