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 相关文章推荐
js中document.write使用过程中的一点疑问解答
Mar 20 Javascript
浅析jQuery中调用ajax方法时在不同浏览器中遇到的问题
Jun 11 Javascript
浅析JavaScript中浏览器的兼容问题
Apr 19 Javascript
浅析JS动态创建元素【两种方法】
Apr 20 Javascript
angular将html代码输出为内容的实例
Sep 30 Javascript
微信小程序template模版的使用方法
Apr 13 Javascript
javascript的this关键字详解
May 20 Javascript
基于vue-cli搭建多模块且各模块独立打包的项目
Jun 12 Javascript
Vue.js 中的实用工具方法【推荐】
Jul 04 Javascript
基于js实现抽红包并分配代码实例
Sep 19 Javascript
利用layer实现表单完美验证的方法
Sep 26 Javascript
Node.js设置定时任务之node-schedule模块的使用详解
Apr 28 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
Javascript 的addEventListener()及attachEvent()区别分析
2009/05/21 Javascript
js打印纸函数代码(递归)
2010/06/18 Javascript
2010年最佳jQuery插件整理
2010/12/06 Javascript
用jquery实现自定义风格的滑动条实现代码
2011/04/26 Javascript
JQuery给元素绑定click事件多次执行的解决方法
2014/05/29 Javascript
jquery Deferred 快速解决异步回调的问题
2016/04/05 Javascript
JS实现点击事件统计的简单实例
2016/07/10 Javascript
zTree树形插件异步加载方法详解
2017/06/14 Javascript
vue获取dom元素注意事项
2017/12/28 Javascript
vue前后分离调起微信支付
2019/07/29 Javascript
[02:00]最后,我终于出了辉耀
2018/03/27 DOTA
基于python脚本实现软件的注册功能(机器码+注册码机制)
2016/10/09 Python
Python做简单的字符串匹配详解
2017/03/21 Python
python编写分类决策树的代码
2017/12/21 Python
Python实现PS图像调整颜色梯度效果示例
2018/01/25 Python
Python class的继承方法代码实例
2020/02/14 Python
使用matlab 判断两个矩阵是否相等的实例
2020/05/11 Python
解决Alexnet训练模型在每个epoch中准确率和loss都会一升一降问题
2020/06/17 Python
Python通用唯一标识符uuid模块使用案例
2020/09/10 Python
详解Anaconda安装tensorflow报错问题解决方法
2020/11/01 Python
python模块内置属性概念及实例
2021/02/18 Python
sort命令的作用和用法
2013/08/25 面试题
企业行政文员岗位职责
2013/12/03 职场文书
机械专业应届生求职信
2013/12/12 职场文书
单位刻章介绍信范文
2014/01/11 职场文书
缅怀革命先烈演讲稿
2014/05/14 职场文书
公司采购主管岗位职责
2014/06/17 职场文书
机械工程及其自动化专业求职信
2014/08/08 职场文书
网站出售协议书范文
2014/10/10 职场文书
会计试用期自我评价
2015/03/10 职场文书
计算机教师工作总结
2015/08/13 职场文书
初中英语教学随笔
2015/08/15 职场文书
学校学习型党组织建设心得体会
2019/06/21 职场文书
详解GaussDB for MySQL性能优化
2021/05/18 MySQL
悬疑名作《朋友游戏》动画无字ED宣传片 新角色公开
2022/04/13 日漫
Mysql中mvcc各场景理解应用
2022/08/05 MySQL