2.20 countBy

2.20.1 语法

_.countBy(list, iteratee, [context])

2.20.2 说明

排序一个列表组成一个组,并且返回各组中的对象的数量的计数。类似groupBy,但是不是返回列表的值,而是返回在该组中值的数目。就像EXCEL里的分类统计

  • list为 遍历的集合,如数组、对象、字符串、arguments等。
  • iteratee 迭代器,可以是一个function也可以字符串等。
  • iteratee 有三个参数 (element, index, list)
  • iteratee 需要有返回
  • context 执行上下文,改成iteratee内的this

2.20.3 代码示例

示例一:根据iteratee分类统计

var parity = _.countBy([1, 2, 3, 4, 5], function (num) {
return num % 2 === 0;
});
//符合条件的key为在true,不符合条件的key为false。
console.log(parity); //=> Object {false: 3, true: 2}

示例二:返回结果的Object指定key

var parity = _.countBy([1, 2, 3, 4, 5], function(num) {
return num % 2 == 0 ? 'even': 'odd';
});
console.log(parity); //=> Object {odd: 3, even: 2}

示例三:改变iteratee内的this

var parity = _.countBy('12345', function (num) {
console.log(this); //5 times => Object {no: 3}
return num > this.no;
}, {no : 3});
console.log(parity); //=> Object {false: 3, true: 2}

示例四:iteratee的三个参数& 不要忘记return

var parity = _.countBy('abc', function (element, index, list) {
console.log(element, index, list);
//=> a 0 abc
//=> b 1 abc
//=> c 2 abc
});
console.log(parity); //=> Object {undefined: 3}

2.20.4 iteratee可以是对象的属性

var list = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten'];
var grouped = _.countBy(list, 'length');
console.log(grouped); //=> Object {3: 4, 4: 3, 5: 3}

2.20.5 iteratee可以是对象的key

var list = [{x:'a'}, {x:'b'}, {x:'a'}];
var grouped = _.countBy(list, 'x');
console.log(grouped); //=> Object {a: 2, b: 1}

2.20.6 iteratee可以是对象

var list = [{x:0, y:0}, {x:0, y:1}, {x:1, y:1}];
var grouped = _.countBy(list, {x:0});
console.log(grouped); //=> Object {true: 2, false: 1}

2.20.7 不传iteratee则以值进行分类统计

var parity = _.countBy('abcab');
console.log(parity); //=> Object {a: 2, b: 2, c: 1}

2.20.8 非集合返回{}

console.log(_.countBy(0)); //=> Object {}
console.log(_.countBy(NaN)); //=> Object {}
console.log(_.countBy(null)); //=> Object {}
console.log(_.countBy(undefined)); //=> Object {}
console.log(_.countBy(true)); //=> Object {}
console.log(_.countBy(false)); //=> Object {}

2.20.9 将字符串分成三组(坑)

var parity = _.countBy('1234567', function (element, index, list) {
//请写下您的代码
});
console.log(parity); //=> Object {3n+1: 3, 3n+2: 2, 3n: 2}

underscorejs-countBy学习的更多相关文章

  1. 不学就吃亏的underscorejs类库学习示例 ——(集合篇)

    underscorejs是一个很不错的类库,我的很多项目都引用了这个类库,的确可以带来很多方便. 记得我当初学的时候,看underscorejs的api是看的一知半解的,甚至不明白api里的conte ...

  2. backbone库学习-Collection

    backbone库的结构: http://www.cnblogs.com/nuysoft/archive/2012/03/19/2404274.html 本文所有例子来自于http://blog.cs ...

  3. Backbone学习笔记一Backbone中的MVC

    原文章地址http://bigdots.github.io/2015/12/01/Backbone学习笔记(一)/#more Backbone.js为复杂WEB应用程序提供模型(models).集合( ...

  4. APPCAN学习笔记004---AppCan与Hybrid,appcan概述

    APPCAN学习笔记004---AppCan与Hybrid,appcan概述 技术qq交流群:JavaDream:251572072 本节讲了appcan的开发流程,和开发工具 笔记不做具体介绍了,以 ...

  5. Angularjs学习笔记《一》

    开始慢慢的学习新的框架,Angularjs,其中原理不知深浅,但有例子练习,慢慢熟知.看的英文文档一点点翻译学习. 第一个例子,写一个增加,选中,删除的例子, 首先要引进所用的框架源码,这样引进,下面 ...

  6. Underscore.js 源码学习笔记(上)

    版本 Underscore.js 1.9.1 一共 1693 行.注释我就删了,太长了… 整体是一个 (function() {...}());  这样的东西,我们应该知道这是一个 IIFE(立即执行 ...

  7. [转] React之Immutable学习记录

    从问题说起:熟悉 React 组件生命周期的话都知道:调用 setState 方法总是会触发 render 方法从而进行 vdom re-render 相关逻辑,哪怕实际上你没有更改到 Compone ...

  8. Backbone学习笔记 - View篇

    Backbone是一种Web端的MVC框架,这里纪录学习Model,View和Collection的笔记. 1 View initialize构造函数 Backbone.View 与jQuery库紧密 ...

  9. 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

    2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...

  10. Angular2学习笔记(1)

    Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...

随机推荐

  1. MVC 5 App 通过 Facebook OAuth2 登陆(Sign-on)的问题

    今天做了下MVC 5 App通过Google, Twitter, Linkedin 和 Facebook进行登录的例子, 算是对Asp.net Identity的一个入门,做的过程中发现了如下的问题, ...

  2. 《University Calculus》-chape6-定积分的应用-平面曲线长度

    平面曲线的长度: 积分的重要作用体现在处理曲线和曲面. 在这里我们讨论平面中一条用参数形式表达的曲线:x=f(t),y=g(t),a≤t≤b. 如图. y=f(x)形式的弧长计算: 之前我们讨论过平面 ...

  3. [置顶] SpecDD系列:“完成” 的定义

    在当今充满变数和快节奏的大环境下,一个产品的上市时间已经成为产品成功与否的重要因素.如果对于“完成”没有一个清晰的定义,那么很可能会遭遇产品延期,风险,并且增加公司成本. “完成的定义”也被俗称为Do ...

  4. PHP代码为什么不能直接保存HTML文件——&gt;PHP生成静态页面教程

    1.server会依据文件的后缀名去进行解析,假设是HTML文件则server不会进行语法解析.而是直接输出到浏览器. 2.假设一个页面中所有都是HTML代码而没有须要解析的PHP语法,则没有必要保存 ...

  5. android 48 广播

    系统开始重启会发送开机重启广播,电量低的时候会发送电量低的广播,广播注册有2种:系统说明文件xml注册和Java代码注册,前者是静态注册(全局注册)后者是动态注册(依赖于当时组建,组件销毁就收不到广播 ...

  6. QDomDocument类

    QDomDocument类代表了一个XML文件 QDomDocument类代表整个的XML文件.概念上讲:它是文档树的根节点,并提供了文档数据的基本访问方法. 由于元素.文本节点.注释.指令执行等等不 ...

  7. jboss 7 as1 日志配置

    原文地址:https://docs.jboss.org/author/display/AS71/Logging+Configuration Overview The overall server lo ...

  8. svn is alread locked

    右键文件夹team →Cleanup就可以了 is not under version control team→ clean 等等更新

  9. 【网络通信】服务器端Socket监听80端口,建立连接传输数据时也是使用的80端口么?

    1. 服务器端Socket监听80端口,建立连接传输数据时也是使用的80端口么? 答:对.建立连接时服务器会分配一个新的Socket,但是用的源端口号还是80端口.套接字是由协议类型.源IP.目的IP ...

  10. Android 6.0 双卡拨号

    相关 api getCallCapablePhoneAccountsAdded in API level 23 Android 5.0 之前的版本 Call from second sim 获取 si ...