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 相关文章推荐
写了10年的Javascript也未必全了解的连续赋值运算
Mar 25 Javascript
jQuery入门介绍之基础知识
Jan 13 Javascript
jquery比较简洁的软键盘特效实现方法
Mar 19 Javascript
JavaScript使用slice函数获取数组部分元素的方法
Apr 06 Javascript
js实现页面a向页面b传参的方法
May 29 Javascript
jQuery Easyui学习教程之实现datagrid在没有数据时显示相关提示内容
Jul 09 Javascript
纯javaScript、jQuery实现个性化图片轮播【推荐】
Jan 08 Javascript
原生JS实现圆环拖拽效果
Apr 07 Javascript
input框中自动展示当前日期yyyy/mm/dd的实现方法
Jul 06 Javascript
vueScroll实现移动端下拉刷新、上拉加载
Mar 22 Javascript
javascript系统时间设置操作示例
Jun 17 Javascript
Vue中keep-alive组件作用详解
Feb 04 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
PHP4之真OO
2006/10/09 PHP
mysq GBKl乱码
2006/11/28 PHP
php+mysqli使用面向对象方式更新数据库实例
2015/01/29 PHP
php根据用户语言跳转相应网页
2015/11/04 PHP
PHP版微信第三方实现一键登录及获取用户信息的方法
2016/10/14 PHP
PHP守护进程化在C和PHP环境下的实现
2017/11/21 PHP
Laravel框架使用Redis的方法详解
2018/05/30 PHP
PHP数组实际占用内存大小原理解析
2020/12/11 PHP
禁用页面部分JavaScript方法的具体实现
2013/07/31 Javascript
关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法
2016/05/17 Javascript
分享一个插件实现水珠自动下落效果
2016/06/01 Javascript
微信小程序组件 contact-button(客服会话按钮)详解及实例代码
2017/01/10 Javascript
weex slider实现滑动底部导航功能
2017/08/28 Javascript
在Vue中获取组件声明时的name属性方法
2018/09/12 Javascript
[04:48]DOTA2亚洲邀请赛林书豪为VGJ加油
2017/04/01 DOTA
[00:32]2018DOTA2亚洲邀请赛出场——LGD
2018/04/04 DOTA
Python实现批量修改文件名实例
2015/07/08 Python
python爬取m3u8连接的视频
2018/02/28 Python
python 每天如何定时启动爬虫任务(实现方法分享)
2018/05/21 Python
Python数据持久化shelve模块用法分析
2018/06/29 Python
Python Unittest根据不同测试环境跳过用例的方法
2018/12/16 Python
使用Python快乐学数学Github万星神器Manim简介
2019/08/07 Python
python中提高pip install速度
2020/02/14 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
2020/05/26 Python
Python学习之os模块及用法
2020/06/03 Python
Python通过getattr函数获取对象的属性值
2020/10/16 Python
倩碧英国官网:Clinique英国
2018/08/10 全球购物
Windows和Linux动态库应用异同
2016/04/17 面试题
JAVA中运算符的分类及举例
2015/09/12 面试题
服装采购员岗位职责
2014/03/15 职场文书
大学生实习证明范文(5篇)
2014/09/18 职场文书
中秋节随笔
2015/08/15 职场文书
重阳节主题班会
2015/08/17 职场文书
linux下导入、导出mysql数据库命令的实现方法
2021/05/26 MySQL
Python爬虫实战之爬取京东商品数据并实实现数据可视化
2021/06/07 Python
python+opencv实现视频抽帧示例代码
2021/06/11 Python