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> 是一个泛型集合,并且实现了一些接口 ...
随机推荐
- oracle存储过程 --1
一,oracle存储过程语法 1.oracle存储过程结构 CREATE OR REPLACE PROCEDURE oracle存储过程名字 ( 参数1 IN NUMBER, 参 ...
- POJ-3261-Milk Patterns(后缀数组)
题意: 给定一个字符串,求至少出现k 次的最长重复子串,这k 个子串可以重叠. 分析: 先二分答案,然后将后缀分成若干组. 不同的是,这里要判断的是有没有一个组的后缀个数不小于k. 如果有,那么存在k ...
- LightOJ 1135(线段树)
题解引自:http://www.cnblogs.com/wuyiqi/archive/2012/05/27/2520642.html 题意: 有n个数,刚开始都为0 add i , j 给i,j区间内 ...
- -_-#【CSS】注释
- 数据结构(线段树):CodeForces 145E Lucky Queries
E. Lucky Queries time limit per test 3 seconds memory limit per test 256 megabytes input standard in ...
- 动态规划——A 最大子段和
A - 最大子段和 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit St ...
- 洛谷2344 奶牛抗议(DP+BIT+离散化)
洛谷2344 奶牛抗议 本题地址:http://www.luogu.org/problem/show?pid=2344 题目背景 Generic Cow Protests, 2011 Feb 题目描述 ...
- linux —— 学习笔记(软件操作:安装、卸载、执行)
目录: 0.相关基本命令 1.安装软件 2.卸载软件 3.打开软件 0.相关基本命令 与软件操作相关的主要命令有:dpkg 和 apt-get . dpkg : “dpkg ...
- 让大蛇(Python)帮你找工作 之增强版
前一段时间用Python写了个简单的网络爬虫,可以从某个求职网站上根据预先设置的条件一次性的爬取所有的职位信息,最近对该程序进行了一下完善,主要包括如下内容 (1)可以对爬取的结果再进行筛选 例如,你 ...
- Change value of string array at debug eclipse--转
Question: I have an application, but to test something, I need to change value of a String[]. But wh ...