和的map()filter()类似,但是underscore的map()filter()可以作用于Object。当作用于Object时,传入的函数为function (value, key),第一个参数接收value,第二个参数接收key:

    你也许会想,为啥对Object作map()操作的返回结果是Array?应该是Object才合理啊!把_.map换成_.mapObject再试试。

    every / some

    当集合的所有元素都满足条件时,_.every()函数返回true,当集合的至少一个元素满足条件时,_.some()函数返回true

    Collections - 图2

    这两个函数直接返回集合中最大和最小的数:

    1. 'use strict';
    2. var arr = [3, 5, 7, 9];
    3. _.max(arr); // 9
    4. _.min(arr); // 3
    5. // 空集合会返回-Infinity和Infinity,所以要先判断集合不为空:
    6. -Infinity
    7. _.min([])
    8. Infinity

    注意,如果集合是Object,max()min()只作用于value,忽略掉key:

    groupBy

    groupBy()把集合的元素按照key归类,key由传入的函数返回:

    1. 'use strict';
    2. var scores = [20, 81, 75, 40, 91, 59, 77, 66, 72, 88, 99];
    3. var groups = _.groupBy(scores, function (x) {
    4. if (x < 60) {
    5. return 'C';
    6. } else if (x < 80) {
    7. return 'B';
    8. } else {
    9. }
    10. });
    11. // 结果:
    12. // {
    13. // A: [81, 91, 88, 99],
    14. // B: [75, 77, 66, 72],
    15. // C: [20, 40, 59]
    16. // }

    shuffle()用洗牌算法随机打乱一个集合:

    sample()则是随机选择一个或多个元素:

    1. 'use strict';
    2. // 注意每次结果都不一样:
    3. // 随机选1个:
    4. _.sample([1, 2, 3, 4, 5, 6]); // 2
    5. _.sample([1, 2, 3, 4, 5, 6], 3); // [6, 1, 4]

    更多完整的函数请参考underscore的文档:

    读后有收获可以支付宝请作者喝咖啡,读后有疑问请加微信群讨论:

    Collections - 图4