2010-09-26 67 views

回答

14

只是迭代这个数组,然后创建哈希:

var obj = {}; 
for(var i = 0, l = colors.length; i < l; i++) { 
    obj[colors[i]] = true; 
} 
var hash = new Hash(obj); 

您也可以从一开始就创建一个新的Hash对象:

var hash = new Hash(); 
for(var i = 0, l = colors.length; i < l; i++) { 
    hash.set(colors[i], true); 
} 

我建议有一个看documentation

+0

除了原语,如字符串,数字,布尔等 – 2010-09-26 13:59:37

+1

@Marcel:我不是很确定这些是如何在内部处理的,但我认为它们也是对象。 – 2010-09-26 14:06:54

+2

我也不确定JS引擎如何在内部处理这些内容,但根据[ECMAScript规范](http://ecma262-5.com/ELS5_Section_8.htm#Section_8),字符串,数字和布尔值绝对不是对象。例如,当使用'String'方法时,一个字符串原语被暂时转换为一个对象,该方法被调用并且'String'对象被转换回一个字符串原语。另外请注意,所有对象都应该评估为“true”,而基元可以评估为“false”。例如:'var yes = new Boolean(false);如果(是)alert(“I <3 JavaScript”);'outputs'I <3 JavaScript' – 2010-09-26 14:12:13

0

感谢所有

这里是使用prototypejs,并激发了我的解决方案由Felix的答案

var hash = new Hash(); 
colors.each(function(color) { 
    hash.set(color, true); 
}); 
8

此功能的JavaScript解决方案使用Array.prototype.reduce()

['red', 'green', 'blue'] 
.reduce((hash, elem) => { hash[elem] = true; return hash }, {}) 

Parameter Details

  • callback - 对数组中的每个值执行的函数。
  • initialValue - 用作回调函数的第一个参数的第一个参数的对象。

回调函数的第三个参数是当前在数组中处理的元素的索引。所以,如果你想创建元素的查找表的索引:

['red', 'green', 'blue'].reduce(
    (hash, elem, index) => { 
    hash[elem] = index++; 
    return hash 
    }, {}); 

返回:

Object {red: 0, green: 1, blue: 2} 
+0

如果这不起作用,请确保您没有忘记最后一个参数 - ',{}'。没有它,你只能获得第一个价值。 – 2016-11-01 00:57:16