如何使用Prototype JavaScript framewor从数组创建哈希?

den*_*min 5 javascript prototypejs

我有一个数组 ['red', 'green', 'blue']

我想从这个Array创建一个新的Hash,结果应该是

{'red':true, 'green':true, 'blue':true}
Run Code Online (Sandbox Code Playgroud)

使用Prototype实现该目标的最佳方法是什么?

Fel*_*ing 15

只需迭代数组,然后创建哈希:

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

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

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

我建议看看文档.

  • 我也不确定JS引擎如何在内部处理它们,但根据[ECMAScript规范](http://ecma262-5.com/ELS5_Section_8.htm#Section_8),字符串,数字和布尔值绝对不是对象.例如,当使用`String`方法时,字符串基元暂时转换为对象,调用该方法并将`String`对象转换回字符串基元.还要注意所有对象应该评估为"true",而基元可以评估为"false".例如:`var yes = new Boolean(false); if(yes)alert("我<3 JavaScript");`输出`I <3 JavaScript` (2认同)

Mik*_*ant 9

这个功能性的JavaScript解决方案使用Array.prototype.reduce():

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

参数详情:

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

回调的第三个参数是数组中正在处理的当前元素的索引.因此,如果您想要为其索引创建元素的查找表:

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

返回:

Object {red: 0, green: 1, blue: 2}
Run Code Online (Sandbox Code Playgroud)