underscore之Collections_动力节点Java学院整理


Posted in Javascript onJuly 10, 2017

underscore为集合类对象提供了一致的接口。集合类是指Array和Object,暂不支持Map和Set。

map/filter

和Array的map()与filter()类似,但是underscore的map()和filter()可以作用于Object。当作用于Object时,传入的函数为function (value, key),第一个参数接收value,第二个参数接收key:

'use strict';
var obj = {
  name: 'bob',
  school: 'No.1 middle school',
  address: 'xueyuan road'
};
var upper = _.map(obj, function (value, key) {
  return value;
});
alert(JSON.stringify(upper));

你也许会想,为啥对Object作map()操作的返回结果是Array?应该是Object才合理啊!把_.map换成_.mapObject再试试。

every / some

当集合的所有元素都满足条件时,_.every()函数返回true,当集合的至少一个元素满足条件时,_.some()函数返回true:

'use strict';
// 所有元素都大于0?
_.every([1, 4, 7, -3, -9], (x) => x > 0); // false
// 至少一个元素大于0?
_.some([1, 4, 7, -3, -9], (x) => x > 0); // true

当集合是Object时,我们可以同时获得value和key:

'use strict';
var obj = {
  name: 'bob',
  school: 'No.1 middle school',
  address: 'xueyuan road'
};
// 判断key和value是否全部是小写:
var r1 = _.every(obj, function (value, key) {
  return value;
});
var r2 = _.some(obj, function (value, key) {
  return value;
});
alert('every key-value are lowercase: ' + r1 + '\nsome key-value are lowercase: ' + r2);

max / min

这两个函数直接返回集合中最大和最小的数:

'use strict';
var arr = [3, 5, 7, 9];
_.max(arr); // 9
_.min(arr); // 3
// 空集合会返回-Infinity和Infinity,所以要先判断集合不为空:
_.max([])
-Infinity
_.min([])
Infinity

注意,如果集合是Object,max()和min()只作用于value,忽略掉key:

'use strict';
_.max({ a: 1, b: 2, c: 3 }); // 3

groupBy

groupBy()把集合的元素按照key归类,key由传入的函数返回:

'use strict';
var scores = [20, 81, 75, 40, 91, 59, 77, 66, 72, 88, 99];
var groups = _.groupBy(scores, function (x) {
  if (x < 60) {
    return 'C';
  } else if (x < 80) {
    return 'B';
  } else {
    return 'A';
  }
});
// 结果:
// {
//  A: [81, 91, 88, 99],
//  B: [75, 77, 66, 72],
//  C: [20, 40, 59]
// }

可见groupBy()用来分组是非常方便的。

shuffle / sample

shuffle()用洗牌算法随机打乱一个集合:

'use strict';
// 注意每次结果都不一样:
_.shuffle([1, 2, 3, 4, 5, 6]); // [3, 5, 4, 6, 2, 1]
sample()则是随机选择一个或多个元素:
'use strict';
// 注意每次结果都不一样:
// 随机选1个:
_.sample([1, 2, 3, 4, 5, 6]); // 2
// 随机选3个:
_.sample([1, 2, 3, 4, 5, 6], 3); // [6, 1, 4]
Javascript 相关文章推荐
[原创]网络复制内容时常用的正则+editplus
Nov 30 Javascript
JavaScript中常见陷阱小结
Apr 27 Javascript
图标线性回归斜着移动到指定的位置
Aug 16 Javascript
7个去伪存真的JavaScript面试题
Jan 07 Javascript
javaScript 事件绑定、事件冒泡、事件捕获和事件执行顺序整理总结
Oct 10 Javascript
JavaScript登录验证码的实现
Oct 27 Javascript
Mongoose学习全面理解(推荐)
Jan 21 Javascript
浅谈Node框架接入ELK实践总结
Feb 22 Javascript
vue实现登录拦截
Jun 29 Javascript
浅谈JavaScript 声明提升
Sep 14 Javascript
ES6的循环与可迭代对象示例详解
Jan 31 Javascript
在 HTML 页面中使用 React的场景分析
Jan 18 Javascript
Angular.js组件之input mask对input输入进行格式化详解
Jul 10 #Javascript
underscore之Chaining_动力节点Java学院整理
Jul 10 #Javascript
Vue 2.0的数据依赖实现原理代码简析
Jul 10 #Javascript
Vue实现virtual-dom的原理简析
Jul 10 #Javascript
Vue2路由动画效果的实现代码
Jul 10 #Javascript
深入浅析Node.js单线程模型
Jul 10 #Javascript
require.js中的define函数详解
Jul 10 #Javascript
You might like
PHP校验ISBN码的函数代码
2011/01/17 PHP
深入理解PHP原理之Session Gc的一个小概率Notice
2011/04/12 PHP
ThinkPHP框架设计及扩展详解
2014/11/25 PHP
php表单敏感字符过滤类
2014/12/08 PHP
PHP处理大量表单字段的便捷方法
2015/02/07 PHP
变量在 PHP7 内部的实现(一)
2015/12/21 PHP
PHP基于curl模拟post提交json数据示例
2018/06/22 PHP
PHP htmlspecialchars()函数用法与实例讲解
2019/03/08 PHP
浅析return false的正确使用
2013/11/04 Javascript
jQuery(js)获取文字宽度(显示长度)示例代码
2013/12/31 Javascript
Javascript基于对象三大特性(封装性、继承性、多态性)
2016/01/04 Javascript
Jquery easyui开启行编辑模式增删改操作
2016/01/14 Javascript
webpack+vue.js实现组件化详解
2016/10/12 Javascript
canvas压缩图片转换成base64格式输出文件流
2017/03/09 Javascript
微信小程序开发animation心跳动画效果
2017/08/16 Javascript
详解Node.js中的Async和Await函数
2018/02/22 Javascript
Angular4集成ng2-file-upload的上传组件
2018/03/14 Javascript
vue如何将v-for中的表格导出来
2018/05/07 Javascript
vue-content-loader内容加载器的使用方法
2018/08/05 Javascript
javascript实现的字符串转换成数组操作示例
2019/06/13 Javascript
node获取客户端ip功能简单示例
2019/08/24 Javascript
用Python进行简单图像识别(验证码)
2018/01/19 Python
JavaScript实现一维数组转化为二维数组
2018/04/17 Python
python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
2019/08/28 Python
Python API自动化框架总结
2019/11/12 Python
美国轮胎网站:Priority Tire
2018/11/28 全球购物
StubHub新西兰:购买和出售你的门票
2019/04/22 全球购物
实习自荐信
2013/10/13 职场文书
大学生写自荐信的技巧
2014/01/08 职场文书
2014爱耳日宣传教育活动总结
2014/03/09 职场文书
安全承诺书范文
2014/03/26 职场文书
党员作风建设自查报告
2014/10/23 职场文书
2014年人力资源部工作总结
2014/11/19 职场文书
员工2014年度工作总结
2014/12/09 职场文书
交流会主持词
2015/07/02 职场文书
详解Java ES多节点任务的高效分发与收集实现
2021/06/30 Java/Android