我有一个数组['red', 'green', 'blue']
如何使用Prototype JavaScript framewor从数组创建哈希?
我想创建此数组中一个新的Hash,结果应该是
{'red':true, 'green':true, 'blue':true}
什么是实现使用原型,目标的最佳方式是什么?
我有一个数组['red', 'green', 'blue']
如何使用Prototype JavaScript framewor从数组创建哈希?
我想创建此数组中一个新的Hash,结果应该是
{'red':true, 'green':true, 'blue':true}
什么是实现使用原型,目标的最佳方式是什么?
只是迭代这个数组,然后创建哈希:
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 。
感谢所有
这里是使用prototypejs
,并激发了我的解决方案由Felix的答案
var hash = new Hash();
colors.each(function(color) {
hash.set(color, true);
});
此功能的JavaScript解决方案使用Array.prototype.reduce():
['red', 'green', 'blue']
.reduce((hash, elem) => { hash[elem] = true; return hash }, {})
回调函数的第三个参数是当前在数组中处理的元素的索引。所以,如果你想创建元素的查找表的索引:
['red', 'green', 'blue'].reduce(
(hash, elem, index) => {
hash[elem] = index++;
return hash
}, {});
返回:
Object {red: 0, green: 1, blue: 2}
如果这不起作用,请确保您没有忘记最后一个参数 - ',{}'。没有它,你只能获得第一个价值。 – 2016-11-01 00:57:16
除了原语,如字符串,数字,布尔等 – 2010-09-26 13:59:37
@Marcel:我不是很确定这些是如何在内部处理的,但我认为它们也是对象。 – 2010-09-26 14:06:54
我也不确定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