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入门·对象属性方法大总结
Oct 01 Javascript
js 静态动态成员 and 信息的封装和隐藏
May 29 Javascript
用JQuery 判断某个属性是否存在hasAttr的解决方法
Apr 26 Javascript
js实现全屏漂浮广告移入光标停止移动
Dec 02 Javascript
JS代码防止SQL注入的方法(超简单)
Apr 12 Javascript
vue.js 表格分页ajax 异步加载数据
Oct 18 Javascript
详解微信小程序 页面跳转 传递参数
Dec 08 Javascript
jQuery源码解读之extend()与工具方法、实例方法详解
Mar 30 jQuery
详解vue通过NGINX部署在子目录或者二级目录实践
Sep 03 Javascript
layer ui插件显示tips时,修改字体颜色的实现方法
Sep 11 Javascript
详解vue页面首次加载缓慢原因及解决方案
Nov 06 Javascript
js实现录音上传功能
Nov 22 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中其实也可以用方法链
2011/11/10 PHP
基于php常用正则表达式的整理汇总
2013/06/08 PHP
php addslashes 利用递归实现使用反斜线引用字符串
2013/08/05 PHP
PHP+Ajax验证码验证用户登录
2016/07/20 PHP
firefox浏览器下javascript 拖动层效果与原理分析代码
2007/12/04 Javascript
JavaScript XML和string相互转化实现代码
2011/07/04 Javascript
情人节专属 纯js脚本1k大小的3D玫瑰效果
2012/02/11 Javascript
ejs v9 javascript模板系统
2012/03/21 Javascript
关于js new Date() 出现NaN 的分析
2012/10/23 Javascript
JS cookie中文乱码解决方法
2014/01/28 Javascript
Jquery修改页面标题title其它JS失效的解决方法
2014/10/31 Javascript
node.js中的querystring.unescape方法使用说明
2014/12/10 Javascript
JS实现来回出现文字的状态栏特效代码
2015/10/31 Javascript
返回函数的JavaScript函数
2016/06/14 Javascript
浅谈javascript中的数据类型转换
2016/12/27 Javascript
vue.js 初体验之Chrome 插件开发实录
2017/05/13 Javascript
js canvas实现适用于移动端的百分比仪表盘dashboard
2017/07/18 Javascript
vue上传图片组件编写代码
2017/07/26 Javascript
一种angular的方法级的缓存注解(装饰器)
2018/03/13 Javascript
Vue.js最佳实践(五招助你成为vuejs大师)
2018/05/04 Javascript
微信小程序简单的canvas裁剪图片功能详解
2019/07/12 Javascript
使用Python画股票的K线图的方法步骤
2019/06/28 Python
详解如何从TensorFlow的mnist数据集导出手写体数字图片
2019/08/05 Python
Python接口测试环境搭建过程详解
2020/06/29 Python
Django serializer优化类视图的实现示例
2020/07/16 Python
python+selenium实现12306模拟登录的步骤
2021/01/21 Python
使用css3匹配手机屏幕横竖状态
2014/01/27 HTML / CSS
linux面试题参考答案(1)
2016/01/22 面试题
销售副总经理岗位职责
2013/12/11 职场文书
超市总经理岗位职责
2014/02/02 职场文书
费用申请报告范文
2015/05/15 职场文书
海底两万里读书笔记
2015/06/26 职场文书
庆七一晚会主持词
2015/06/30 职场文书
大学组织委员竞选稿
2015/11/21 职场文书
js中Map和Set的用法及区别实例详解
2022/02/15 Javascript
Java工作中实用的代码优化技巧分享
2022/04/21 Java/Android