Underscore一个JavaScript实用库,提供了一整套函数式编程的实用功能,但是没有扩展任何JavaScript内置对象。它是这个问题的答案:“如果我在一个空白的HTML页面前坐下, 并希望立即开始工作, 我需要什么?“...它弥补了部分jQuery没有实现的功能,同时又是Backbone.js必不可少的部分。
Underscore提供了100多个函数,包括常用的: map, filter, invoke — 当然还有更多专业的辅助函数,如:函数绑定, JavaScript模板功能,创建快速索引, 强类型相等测试, 等等.
下面看看集合中几个常用的函数:
1、each:遍历list中的所有元素,按顺序用遍历输出每个元素。
//遍历数组<> _.each([1, 2, 3], alert); //遍历对象 _.each({one: 1, two: 2, three: 3}, alert);
输出结果为:
alerts each number in turn... alerts each number value in turn...
2、map:通过转换函数(iteratee迭代器)映射列表中的每个值产生价值的新数组。
_.map(list, iteratee, [context]) Alias: collect
//遍历数组: _.map([1, 2, 3], function(num){ return num * 3; }); //遍历对象: _.map({one: 1, two: 2, three: 3}, function(num, key){ return num * 3; }); //遍历多个数组并返回数组的第一个元素: _.map([[1, 2], [3, 4]], _.first);
输出结果:
[3, 6, 9] [3, 6, 9] [1, 3]
3.filter:遍历list中的每个值,返回包含所有通过predicate真值检测的元素值。
//遍历数组: var evens = _.filter([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });
输出结果为:
[2, 4, 6]
4.countBy:排序一个列表组成一个组,并且返回各组中的对象的数量的计数。
//遍历数组: _.countBy([1, 2, 3, 4, 5], function(num) { return num % 2 == 0 ? 'even': 'odd'; });
输出结果:
{odd: 3, even: 2}