2010-09-26 29 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