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> 是一个泛型集合,并且实现了一些接口 ...
随机推荐
- 【转】Usage of sendBroadcast()
原文网址:http://stackoverflow.com/questions/4883079/usage-of-sendbroadcast sendBroadcast() - Should it b ...
- (转载)PHP怎么获取MySQL执行sql语句的查询时间
(转载自CSDN) 方法一: //计时开始 runtime(); //执行查询 mysql_query($sql); //计时结束. echo runtime(1); //计时函数 function ...
- ActionScript接收socket服务器发送来的数据
原文地址:http://www.asp119.com/news/2009522181815_1.htm 从socket中接收数据的方法取决于你使用socket类型,Socket和XMLSocket都可 ...
- jsp中的contentType与pageEncoding的区别和作用
jsp中的contentType与pageEncoding的区别和作用 <%@ page contentType="text/html; charset=utf-8" p ...
- kvm编译安装及常见问题解决
一.KVM的编译安装 1.安装基本系统和开发工具 1.1 编译内核 mkdir /root/kvm cd /root/kvm wget http://www.kernel.org/pub/linux/ ...
- NOI2003 文本编辑器
练手QAQ #include<iostream> #include<algorithm> #include<cstdio> #include<cstdlib& ...
- iphone匹配邮箱的正则表达式
NSString *str = [NSString stringWithString:@"\\b([a-zA-Z0-9%_.+\\-]+)@([a-zA-Z0-9.\\-]+?\\.[a-z ...
- 《Windows编程零基础学》第零节
首先很开心申请到了这一个专栏<Windows编程零基础学> 这是第一篇文章,在这里,我将讲述一些基础的知识. 什么是Windows编程 所谓Windows编程就是在Windows平台上开发 ...
- Linux开发工具之Makefile(上)
二.makefile(上) 01.make工具 利用make工具可以自动完成编译工作.这些工作包括:如果修改了某几 个源文件,则只重装新编译这几个源文件:如果某个头文件被修改了,则 重新编译所有包 ...
- TwoSAT算法模板
该模板来自大白书 [解释] 给多个语句,每个语句为“ Xi为真(假) 或者 Xj为真(假)” 每个变量和拆成两个点 2*i为假, 2*i+1为真 “Xi为真 或 Xj为真” 等价于 “Xi为假 –& ...