我有一個數組['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