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学习笔记之获取当前目录的实现代码
Dec 14 Javascript
一个页面元素appendchild追加到另一个页面元素的问题
Jan 27 Javascript
jQuery制作仿腾讯web qq用户体验桌面
Aug 20 Javascript
jQuery实现瀑布流布局
Dec 12 Javascript
JQuery解析XML数据的几个简单实例
May 18 Javascript
浅谈JS函数节流防抖
Oct 18 Javascript
Vue-Router模式和钩子的用法
Feb 28 Javascript
vue脚手架及vue-router基本使用
Apr 09 Javascript
js实现简单选项卡功能
Mar 23 Javascript
JS实现点击拉拽轮播图pc端移动端适配
Sep 05 Javascript
详解Vue CLI 3.0脚手架如何mock数据
Nov 23 Javascript
带你使用webpack快速构建web项目的方法
Nov 12 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
PHP5中的this,self和parent关键字详解教程
2007/03/19 PHP
Thinkphp模板中截取字符串函数简介
2014/06/17 PHP
php使用cookie保存登录用户名的方法
2015/01/26 PHP
php使用正则验证中文
2016/04/06 PHP
PHP接收App端发送文件流的方法
2016/09/23 PHP
php实现文件与16进制相互转换的方法示例
2017/02/16 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
子窗口、父窗口和Silverlight之间的相互调用
2010/08/16 Javascript
基于jquery的多彩百分比 动态进度条 投票效果显示效果实现代码
2011/08/28 Javascript
前台js改变Session的值(用ajax实现)
2012/12/28 Javascript
使用js操作cookie的一点小收获分享
2013/09/03 Javascript
javascript日期格式化示例分享
2014/03/05 Javascript
jQuery 获取兄弟元素的几种不错方法
2014/05/23 Javascript
js图片轮播手动切换效果
2015/11/10 Javascript
浅谈JS继承_借用构造函数 &amp; 组合式继承
2016/08/16 Javascript
js将字符串中的每一个单词的首字母变为大写其余均为小写
2017/01/05 Javascript
深入理解react-router@4.0 使用和源码解析
2017/05/23 Javascript
Angular4学习笔记之实现绑定和分包
2017/08/01 Javascript
async/await地狱该如何避免详解
2018/05/10 Javascript
JS实现集合的交集、补集、差集、去重运算示例【ES5与ES6写法】
2019/02/18 Javascript
借助云开发实现小程序短信验证码的发送
2020/01/06 Javascript
Python实现 多进程导入CSV数据到 MySQL
2017/02/26 Python
python数据结构之链表详解
2017/09/12 Python
Python基于更相减损术实现求解最大公约数的方法
2018/04/04 Python
Python删除n行后的其他行方法
2019/01/28 Python
在pycharm中显示python画的图方法
2019/08/31 Python
Python selenium的基本使用方法分析
2019/12/21 Python
泰坦健身器材:Titan Fitness
2018/02/13 全球购物
英国品牌男装折扣网站:Brown Bag
2018/03/08 全球购物
通往英国高街的商店橱窗:Down Your High Street
2020/07/19 全球购物
如何提高SQL Server的安全性
2016/07/25 面试题
EJB2和EJB3在架构上的不同点
2014/09/29 面试题
2015年信访维稳工作总结
2015/04/07 职场文书
业务员管理制度范本
2015/08/06 职场文书
浅谈mysql执行过程以及顺序
2021/05/12 MySQL
Golang gRPC HTTP协议转换示例
2022/06/16 Golang