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 相关文章推荐
Firefox div高度自适应
Apr 28 Javascript
JavaScript 对话框和状态栏使用说明
Oct 25 Javascript
关于juqery radio写法的兼容性问题(新老版本jquery)
Jun 14 Javascript
js取滚动条的尺寸的函数代码
Nov 30 Javascript
poshytip 基于jquery的 插件 主要用于显示微博人的图像和鼠标提示等
Oct 12 Javascript
阻止子元素继承父元素事件具体思路及实现
May 02 Javascript
js实现按一下删除键删除整个单词附demo
Sep 05 Javascript
js和jquery分别验证单选框、复选框、下拉框
Dec 17 Javascript
axios基本入门用法教程
Mar 25 Javascript
详解vue-cli与webpack结合如何处理静态资源
Sep 19 Javascript
npm 常用命令详解(小结)
Jan 17 Javascript
JavaScript 作用域实例分析
Oct 02 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
ThinkPHP多表联合查询的常用方法
2020/03/24 PHP
PHP实现将视频转成MP4并获取视频预览图的方法
2015/03/12 PHP
PHP isset empty函数相关面试题及解析
2020/12/11 PHP
jQuery 拖动层(在可视区域范围内)
2012/05/24 Javascript
JavaScript 函数惰性载入的实现及其优点介绍
2013/08/12 Javascript
js拼接html注意问题示例探讨
2014/07/14 Javascript
jQuery中[attribute^=value]选择器用法实例
2014/12/31 Javascript
Javascript数据结构与算法之列表详解
2015/03/12 Javascript
Bootstrap编写一个兼容主流浏览器的受众巨幕式风格页面
2016/07/01 Javascript
jQuery扩展+xml实现表单验证功能的方法
2016/12/25 Javascript
vue获取当前点击的元素并传值的实例
2018/03/09 Javascript
js实现各浏览器全屏代码实例
2018/07/03 Javascript
layui 数据表格+分页+搜索+checkbox+缓存选中项数据的方法
2019/09/21 Javascript
vue 实现根据data中的属性值来设置不同的样式
2020/08/04 Javascript
Vue基于iview table展示图片实现点击放大
2020/08/05 Javascript
[05:05]给小松五分钟系列 第二期介绍为什么打DOTA2
2014/07/02 DOTA
[00:32]DOTA2上海特级锦标赛 Ehome战队宣传片
2016/03/03 DOTA
python中set常用操作汇总
2016/06/30 Python
Python回文字符串及回文数字判定功能示例
2018/03/20 Python
python实现跨excel的工作表sheet之间的复制方法
2018/05/03 Python
详解python里的命名规范
2018/07/16 Python
浅谈Python_Openpyxl使用(最全总结)
2019/09/05 Python
Python ConfigParser模块的使用示例
2020/10/12 Python
python中HTMLParser模块知识点总结
2021/01/25 Python
真正的英国宝藏:Mappin & Webb
2019/05/05 全球购物
经典c++面试题六
2012/01/18 面试题
新锐科技Java程序员面试题
2016/07/25 面试题
车间操作工岗位职责
2013/12/19 职场文书
修理厂厂长岗位职责
2014/01/30 职场文书
文秘人员工作职责
2014/01/31 职场文书
教学改革实施方案
2014/03/31 职场文书
小学生志愿者活动方案
2014/08/23 职场文书
领导干部四风问题自我剖析材料
2014/09/25 职场文书
在职证明书范本(2014新版)
2014/09/25 职场文书
2014年禁毒工作总结
2014/11/24 职场文书
Python语言规范之Pylint的详细用法
2021/06/24 Python