underscorejs-groupBy学习
2.18 groupBy
2.18.1 语法
_.groupBy(list, iteratee, [context])
2.18.2 说明
把list分为多个集合,iterator为分组的依据,返回值为Object
- list可以是数组、对象、字符串或arguments等
- iteratee为分组的依据.
- iterator的参数(value, key, list)
- iterator如果是function需要返回值
- context可以改变iterator内部的this
2.18.3 代码示例
示例一:list可以是数组、对象、字符串或arguments等
var parity;
var iteratee = function(value, key, list){
return value % 2; // value % 2的结果是0或是1,所以key就是0或是1
//return value % 2 === 0; //这样子就变成了true或false
};
//list为数组
parity = _.groupBy([1, 2, 3], iteratee);
console.log(parity); //=> {0:[2], 1:[1, 3]}
//list为对象
parity = _.groupBy({a:1, b:2, c:3}, iteratee);
console.log(parity); //=> {0:[2], 1:[1, 3]}
//list为字符串
parity = _.groupBy('123', iteratee);
console.log(parity); //=> {0:[2], 1:[1, 3]}
//list为arguments
(function(){
parity = _.groupBy(arguments, iteratee);
console.log(parity); //=> {0:[2], 1:[1, 3]}
}(1, 2, 3));
示例二:iteratee可以全局的方法
var parity;
//iteratee可以是全局的方法
parity = _.groupBy([1, 1.4, 1.6, 1.9], Math.floor);
console.log(parity); //=> {1 : [1, 1.4, 1.6, 1.9]}
parity = _.groupBy([1, 1.4, 1.6, 1.9], Math.ceil);
console.log(parity); //=> {1 : [1], 2: [1.4, 1.6, 1.9]}
示例三:iteratee可以是list内元素的属性
var parity = _.groupBy(['a', 'b', 'cc'], 'length');
console.log(parity); //=> {1:['a', 'b'], 2:['c']}
示例四:iteratee可以是list内,元素的key
这种情况其实是用的最多的。
var array = [{
"type": "stream",
"price": "3.99",
"id": "13nee"
}, {
"type": "stream",
"price": "2.99",
"id": "8ejwj"
}, {
"type": "buy",
"price": "3.99".
"id": "9akwk"
}];
var parity = _.groupBy(array, 'type');
console.log(parity);
//=>
// {
// stream: [{
// "type": "stream",
// "price": "3.99",
// "id": "13nee"
// }, {
// "type": "stream",
// "price": "2.99",
// "id": "8ejwj"
// }],
// buy: [{
// "type": "buy",
// "price": "3.99".
// "id": "9akwk"
// }]
// }
示例五:iteratee的参数
_.groupBy('abc', function(v, i, l){
console.log(v, i, l);
//=> a 0 abc
//=> b 1 abc
//=> c 2 abc
return v;
});
示例六:context可以改变iterator内部的this(坑)
_.groupBy('1', function(v, i, l){
console.log(this);//=> Object {txt: "moe"}
}, {txt : 'moe'});
_.groupBy('1', function(v, i, l){
console.log(this ===1 ); //true or false?
}, 1);
2.18.4 list的特殊情况
console.log(_.groupBy(null)); //=> Object {}
console.log(_.groupBy(undefined)); //=> Object {}
console.log(_.groupBy(NaN)); //=> Object {}
console.log(_.groupBy(true)); //=> Object {}
console.log(_.groupBy(false)); //=> Object {}
2.18.5 将下列数组,按是否数字分类
var arr = [1, '1', '2', 2, '3', '3'];
var parity = (function(arr){
//写下你的代码
}(arr));
console.log(parity);
//=> {false:['1', '2', '3', '3'], true: [1, 2]}
underscorejs-groupBy学习的更多相关文章
- 不学就吃亏的underscorejs类库学习示例 ——(集合篇)
underscorejs是一个很不错的类库,我的很多项目都引用了这个类库,的确可以带来很多方便. 记得我当初学的时候,看underscorejs的api是看的一知半解的,甚至不明白api里的conte ...
- (数据科学学习手札69)详解pandas中的map、apply、applymap、groupby、agg
*从本篇开始所有文章的数据和代码都已上传至我的github仓库:https://github.com/CNFeffery/DataScienceStudyNotes 一.简介 pandas提供了很多方 ...
- CUBRID学习笔记 41 sql语法之groupby 等
cubrid的中sql查询语法groupby GROUP BY ... HAVING Clause 按dept_no分组 SELECT dept_no, avg(sales_amount) FROM ...
- 【学习】数据聚合和分组运算【groupby】
分组键可以有多种方式,且类型不必相同 列表或数组, 某长度与待分组的轴一样 表示DataFrame某个列名的值 字典或Series,给出待分组轴上的值与分组名之间的对应关系 函数用于处理轴索引或索引中 ...
- RxSwift学习笔记7:buffer/window/map/flatMap/flatMapLatest/flatMapFirst/concatMap/scan/groupBy
1.buffer的基本使用 let publishSubject = PublishSubject<String>() //buffer 方法作用是缓冲组合,第一个参数是缓冲时间,第二个参 ...
- LINQ 学习路程 -- 查询操作 GroupBy ToLookUp
Grouping Operators Description GroupBy GroupBy操作返回根据一些键值进行分组,每组代表IGrouping<TKey,TElement>对象 To ...
- python库学习笔记——分组计算利器:pandas中的groupby技术
最近处理数据需要分组计算,又用到了groupby函数,温故而知新. 分组运算的第一阶段,pandas 对象(无论是 Series.DataFrame 还是其他的)中的数据会根据你所提供的一个或多个键被 ...
- 我的MYSQL学习心得(十六) 优化
我的MYSQL学习心得(十六) 优化 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...
- 细谈Slick(5)- 学习体会和将来实际应用的一些想法
通过一段时间的学习和了解以及前面几篇关于Slick的讨论后对Slick这个函数式数据库编程工具有了些具体的了解.回顾我学习Slick的目的,产生了许多想法,觉着应该从实际的工作应用角度把我对Slick ...
- MVC中使用Entity Framework 基于方法的查询学习笔记 (三)
紧接上文,我们已经学习了MVC数据上下文中两个常用的类,这两个类承载着利用函数方式进行数据查询的全部内容,我们既然已经了解了DbSet<TEntity> 是一个泛型集合,并且实现了一些接口 ...
随机推荐
- 【转】Android--广播BroadcastReceiver
原文网址:http://www.cnblogs.com/plokmju/p/android_broadcastreceiver.html 前言 Android四大组件,Activity.Service ...
- 数学(组合,容斥):COGS 1220. 盒子与球
1220. 盒子与球 ★ 输入文件:boxball.in 输出文件:boxball.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] 现有r个互不相同的盒子和n ...
- 动态规划——I 记忆化搜索
Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...
- Registering Shell Extension Handlers
最近在做Windows shell extension 的开发工作,对shell extension handler的注册机制有点疑问,以下摘自MSDN:http://msdn.microsoft.c ...
- Vagrant 集群的部署
使用Vagrant部署集群 一.运行多个虚拟机 我们通过配置Vagrantfile配置两个虚拟机--web服务器和数据库服务器. Vagrant::configure("2") d ...
- 由浅入深吃透MVC框架,驯服烂代码
MVC 已经成为客户端的主流编程框架,相信客户端工程师对它并不陌生,甚至在开发过程中,不通过思考都会自动使用 MVC 框架编程.但在工作过程中,发现许多小伙伴也只是使用 MVC,对于为什么这样使用并不 ...
- HDU 2222 AC自动机 裸题
题意: 问母串中出现多少个模式串 注意ac自动机的节点总数 #include <stdio.h> #include <string.h> #include <queue& ...
- C++设计模式---职责链模式
职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这个对象连成一条链,并沿这条链传递该请求,直到有一个对象处理它为止. 这里发出这个请求的客户端并不知道这当中的哪一 ...
- WebSphere应用服务器中https 请求协议的相关注意事项(服务器使用代理上Internet)
最近遇到个需求需要web服务器应用通过https方式请求外部Internet服务器的接口,一开始本地测试时使用以下代码: String businessCode = "SH30580&quo ...
- 《HTML5 从入门到精通--7.6.3 单元格垂直跨度——rowspan》
单元格除了能够在水平方向上跨列,还能够垂直方向上跨行.跨行设置须要使用rowspan參数. 语法 <td rowspan="单元格跨行数"> 语法解释 与水平跨度相相应 ...