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 相关文章推荐
JavaScript 学习笔记(十六) js事件
Feb 01 Javascript
利用javascript实现web页面中指定区域打印
Oct 30 Javascript
基于jQuery的图片不完全按比例自动缩小
Jul 11 Javascript
浅谈JavaScript中变量和函数声明的提升
Aug 09 Javascript
JS实现图片延迟加载并淡入淡出效果的简单方法
Aug 25 Javascript
JavaScript判断浏览器对CSS3属性是否支持的多种方法
Nov 13 Javascript
防止页面url缓存中ajax中post请求的处理方法
Oct 10 Javascript
jQuery实现页码跳转式动态数据分页
Dec 31 jQuery
利用SpringMVC过滤器解决vue跨域请求的问题
Feb 10 Javascript
利用jquery和BootStrap实现动态滚动条效果
Dec 03 jQuery
Vue Components 数字键盘的实现
Sep 18 Javascript
JS控制下拉列表左右选择实例代码
May 08 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面向对象法则
2012/02/23 PHP
分享8个最佳的代码片段在线测试网站
2013/06/29 PHP
PHP将XML转数组过程详解
2013/11/13 PHP
PHP获取短链接跳转后的真实地址和响应头信息的方法
2014/07/25 PHP
PHP实现简单实用的验证码类
2015/07/29 PHP
yii2中的rules 自定义验证规则详解
2016/04/19 PHP
解决windows上php xdebug 无法调试的问题
2020/02/19 PHP
javascript+mapbar实现地图定位
2010/04/09 Javascript
一个简单的js渐显(fadeIn)渐隐(fadeOut)类
2010/06/19 Javascript
jquery 事件冒泡的介绍以及如何阻止事件冒泡
2012/12/25 Javascript
extjs_02_grid显示本地数据、显示跨域数据
2014/06/23 Javascript
node.js中的fs.symlinkSync方法使用说明
2014/12/15 Javascript
javascript控制台详解
2015/06/25 Javascript
jQuery对html元素的取值与赋值实例详解
2015/12/18 Javascript
JS实现的手机端精简幻灯片效果
2016/09/05 Javascript
微信小程序 MINA文件结构
2016/10/17 Javascript
Bootstrap Modal遮罩弹出层(完整版)
2016/11/21 Javascript
浅谈Webpack下多环境配置的思路
2018/06/27 Javascript
js 下拉菜单点击旁边收起实现(踩坑记)
2019/09/29 Javascript
element 中 el-menu 组件的无限极循环思路代码详解
2020/04/26 Javascript
[54:53]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第二场
2014/05/23 DOTA
python脚本实现统计日志文件中的ip访问次数代码分享
2014/08/06 Python
详解Django+uwsgi+Nginx上线最佳实战
2019/03/14 Python
python之pexpect实现自动交互的例子
2019/07/25 Python
python 模拟登录B站的示例代码
2020/12/15 Python
h5页面背景图很长要有滚动条滑动效果的实现
2021/01/27 HTML / CSS
公司司机岗位职责
2014/02/07 职场文书
升国旗仪式主持词
2014/03/19 职场文书
施工工地安全标语
2014/06/07 职场文书
公司新人试用期自我评价
2014/09/17 职场文书
安全生产月标语
2014/10/07 职场文书
教师查摆问题及整改措施
2014/10/11 职场文书
贫困证明书范文
2015/06/16 职场文书
健康教育主题班会
2015/08/14 职场文书
心得体会格式及范文
2016/01/25 职场文书
pygame面向对象的飞行小鸟实现(Flappy bird)
2021/04/01 Python