在underscore中我们经常会用到的函数主要有以下这些:
each、map、filter、invoke、countBy、first、uniq、defaults
each _.each(list, iteratee, [context])
遍历list中的所有元素,按顺序用遍历输出每个元素。与for循环差多。
var a = [1,2,3]; _.each(a,function(num){}); console.log(a);//输出[1,2,3]
map _.map(list, iteratee, [context])
通过转换函数(iteratee迭代器)映射列表中的每个值产生价值的新数组。也就是通过遍历改变了值得到新的值。
_.map([1, 2, 3], function(num){ return num * 3; }); => [3, 6, 9] _.map({one: 1, two: 2, three: 3}, function(num, key){ return num * 3; }); => [3, 6, 9] _.map([[1, 2], [3, 4]], _.first); => [1, 3]
filter _.filter(list, predicate, [context])
遍历list中的每个值,返回包含所有通过predicate真值检测的元素值。
var evens = _.filter([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; }); => [2, 4, 6]
invoke_.invoke(list, methodName, *arguments)
在list的每个元素上执行methodName方法。 任何传递给invoke的额外参数,invoke都会在调用methodName方法的时候传递给它。 也就是可以在这个函数中调用别的方法。
_.invoke([[5, 1, 7], [3, 2, 1]], 'sort'); => [[1, 5, 7], [1, 2, 3]]
countBy _.countBy(list, iteratee, [context])
排序一个列表组成一个组,并且返回各组中的对象的数量的计数。类似groupBy,但是不是返回列表的值,而是返回在该组中值的数目。 可以对数组中的元素进行计数。
_.countBy([1, 2, 3, 4, 5], function(num) { return num % 2 == 0 ? 'even': 'odd'; }); => {odd: 3, even: 2}
first _.first(array, [n])
Alias: head, take
返回array(数组)的第一个元素。传递 n参数将返回数组中从第一个元素开始的n个元素。
_.first([5, 4, 3, 2, 1]); =>5 _.first([5, 4, 3, 2, 1],[3]); =>5,4,3
uniq _.uniq(array, [isSorted], [iteratee])
对数组或对象进行去除重复。返回 array去重后的副本, 使用 === 做相等测试. 如果您确定 array 已经排序, 那么给 isSorted 参数传递 true值, 此函数将运行的更快的算法. 如果要处理对象元素, 传递 iteratee函数来获取要对比的属性.
_.uniq([1, 2, 1, 3, 1, 4]); => [1, 2, 3, 4] _.uniq([{a:1},{a:1},{a:2}],function(key){return key.a;}); =>[{a:1},{a:2}]
defaults _.defaults(object, *defaults)
用defaults对象填充object 中的undefined属性。 并且返回这个object。一旦这个属性被填充,再使用defaults方法将不会有任何效果。
var iceCream = {flavor: "chocolate"}; _.defaults(iceCream, {flavor: "vanilla", sprinkles: "lots"}); => {flavor: "chocolate", sprinkles: "lots"}