我正在嘗試編寫一個reduce函數,它爲數組中的每個新唯一值分配一個增量整數,並構建一個將唯一元素映射到增量索引的字典。在減少函數內保留一個計數器
我的期望的功能消耗這樣的數組:
[3,1,1,2,3,1,5,1,2]
並輸出一個地圖,看起來像這樣:
功能看起來像這樣:
{3: 0, 1: 1, 2: 2, 5: 3}
一個潛在的解決方案是使用減少,但它需要保持櫃檯外的功能:
var i = 0
var func = [3,1,1,2,3,1,5,1,2].reduce(function(a, b) {
if (!(a in b) {
b[a] = i
i++
}
return b
},{})
有沒有辦法寫這個函數,但不知何故保持計數器在函數的範圍內?很明顯,我可以將所有內容都包含在一個函數中,但有沒有辦法通過簡化來實現?
@RobertRozas:那不行。 '我'將永遠是0. – Chuck