自定义Underscore.js中的range()函数

4

使用Underscore中的range()函数,我可以创建如下代码:

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

我能否以某种方式修改/使用它来创建如下结果:
solution();
>> {0: true, 1: true, 2: true, 3: true}

解决方案可能还包括jQuery。
2个回答

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

jsFiddle

如果你必须使用对象(前者返回数组),在结果上运行以下内容...

_.extend({}, range);

jsFiddle 是一个值得一提的工具,如果你没有使用 Underscore 或者想要使用 jQuery,你可以使用相应的等价方法 $.map()$.extend()


0

所接受的答案对于给定的问题来说完全可以,但应该注意,由于它实际上使用的是索引而不是元素的值,因此它只适用于从零开始递增的整数范围。

这里有另外一种许多可能解决方案中的一种。当我需要将数组转换为“查找哈希表”时,我会这样做:

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

这将考虑您源数组中的实际值,这些值可以是任何顺序的数字或字符串。

我不特别推荐这样做,但如果可以确定您的源范围不包含零,则可以进一步简化它,因为所有值都将是真值:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接