2012-10-12 43 views
4

在下劃線使用range()我可以做這樣的事情:定製Underscore.js'範圍()

_.range(10); 
>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

我可以以某種方式修改/用它來創建一個採用這樣:

solution(); 
>> {0: true, 1: true, 2: true, 3: true} 

解決方案也可能包含jQuery。

回答

8

是的。

var range = _.range(10); 
_.map(range, function() { return true; }); 

jsFiddle

如果你必須有一個對象(前者返回一個數組),在結果上運行此...

_.extend({}, range); 

jsFiddle

值得一提的是,如果您沒有Underscore或想使用jQuery,則有等效的$.map()$.extend()

+0

+1美麗解。 – helpermethod

0

接受的答案對於給定的問題來說很好,但應該注意的是,如給出的那樣,它只適用於從零開始的遞增整數的範圍,因爲它實際上使用索引而不是元素的值。

這是另一種可能的解決方案。當我需要打開一個數組變成「查找散」我這樣做:

var range = _.range(10); 
var hash = _.object(range, range.map(_.const(true))); 

這會考慮到你的源數組中的實際值,這可能是在任何序列號或字符串。

我不是特別推薦這一點,但如果有可能可以肯定,你的源範圍不包括零,可以進一步簡化它,因爲所有的值將是truthy:

var hash = _.object(range, range);