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. 局域网内通过UDP协议进行传输接受数据——AsyncUdpSocket

    在相同的局域网内,可以通过Udp协议进行数据的传输和接收,Udp协议与Http协议不同,Udp更加方便快捷,省去了很多步骤,但是也有很多传输问题,在局域网内小范围传输数据时Udp还是非常能够胜任的. ...

  2. JavaScript高级程序设计15.pdf

    组合继承的问题是会调用2次超类型构造函数 寄生组合式继承 即通过借用构造函数来继承属性,通过原型链的形式来继承方法,思路:不必为了指定子类型的原型而调用超类型的原型,我们所需要的无非是超类型原型的一个 ...

  3. android源码编译环境的准备及编译之后使用emulator运行的方法 - 官方版

    http://source.android.com/source/initializing.html http://blog.csdn.net/ithomer/article/details/6977 ...

  4. 4 hbase表结构 + hbase集群架构及表存储机制

      本博文的主要内容有    .hbase读取数据过程 .HBase表结构 .附带PPT http://hbase.apache.org/ 读写的时候,就需要用hbase了,换句话说,就是读写的时候. ...

  5. 长沙Uber优步司机奖励政策(1月18日~1月24日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  6. flexpaper 背景色变化

    1.mxml文件头部:添加 backgroundAlpha="0" <s:Application xmlns:fx="http://ns.adobe.com/mxm ...

  7. Broken line - SGU 124(判断点与多边形的关系)

    题目大意:RT 分析:构造一条射线,如果穿越偶数条边,那么就在多边形外面,如果穿越奇数条边,那么就在多边形里面. 代码如下: ===================================== ...

  8. 【转】CPU调度

    转自:http://blog.csdn.net/xiazdong/article/details/6280345 CPU调度   用于多道程序 以下先讨论对于单CPU的调度问题. 回顾多道程序,同时把 ...

  9. ListView 分类: WinForm 2014-07-18 22:03 289人阅读 评论(0) 收藏

    一.ListView类(转载) 1.常用的基本属性: (1)FullRowSelect:设置是否行选择模式.(默认为false) 提示:只有在Details视图该属性才有意义. (2) GridLin ...

  10. JBoss 系列十一:JBoss Cluster Framework Demo 介绍

    内容概要 JBoss Cluster Framework Demo包括JGruops.JBossCache.Infinispan,我们在随后的系列中会使用和运行这些示例来说明JGroups.JBoss ...