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 实现Table相同行的单元格自动合并示例代码
Aug 27 Javascript
如何让DIV可编辑、可拖动示例代码
Sep 18 Javascript
Jquery 复选框取值兼容FF和IE8(测试有效)
Oct 29 Javascript
jquery中$(#form :input)与$(#form input)的区别
Aug 18 Javascript
jquery验证邮箱格式是否正确实例讲解
Nov 16 Javascript
微信小程序 解决请求服务器手机预览请求不到数据的方法
Jan 04 Javascript
Angular 4依赖注入学习教程之ValueProvider的使用(七)
Jun 04 Javascript
vue移动端下拉刷新和上拉加载的实现代码
Sep 08 Javascript
关于JavaScript 数组你应该知道的事情(推荐)
Apr 10 Javascript
微信小程序实现左滑动删除效果
Mar 30 Javascript
file-loader打包图片文件时路径错误输出为[object-module]的解决方法
Jan 03 Javascript
JavaScript 去重和重复次数统计
Mar 31 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(4) php 函数 补充2
2010/02/15 PHP
php array_pop()数组函数将数组最后一个单元弹出(出栈)
2011/07/12 PHP
利用php下载xls文件(自己动手写的)
2014/04/18 PHP
ThinkPHP函数详解之M方法和R方法
2015/09/10 PHP
javascript DOM编程实例(智播客学习)
2009/11/23 Javascript
document.addEventListener使用介绍
2014/03/07 Javascript
node.js中的fs.appendFile方法使用说明
2014/12/17 Javascript
javascript递归回溯法解八皇后问题
2015/04/22 Javascript
nodejs简单实现中英文翻译
2015/05/04 NodeJs
使用JavaScript的AngularJS库编写hello world的方法
2015/06/23 Javascript
jquery判断复选框是否被选中的方法
2015/10/16 Javascript
深入浅析knockout源码分析之订阅
2016/07/12 Javascript
vue-star评星组件开发实例
2018/03/01 Javascript
使用Vue组件实现一个简单弹窗效果
2018/04/23 Javascript
vue 中swiper的使用教程
2018/05/22 Javascript
基于Vue实现微信小程序的图文编辑器
2018/07/25 Javascript
ES6知识点整理之数组解构和字符串解构的应用示例
2019/04/17 Javascript
JavaScript一元正号运算符示例代码
2019/06/30 Javascript
Vue实现数据表格合并列rowspan效果
2020/11/30 Javascript
vue.config.js常用配置详解
2019/11/14 Javascript
python实现代理服务功能实例
2013/11/15 Python
Python使用面向对象方式创建线程实现12306售票系统
2015/12/24 Python
详解Python发送邮件实例
2016/01/10 Python
Python中运算符&quot;==&quot;和&quot;is&quot;的详解
2016/10/08 Python
Python检查图片是否损坏及图片类型是否正确过程详解
2019/09/30 Python
python字符串反转的四种方法详解
2019/12/02 Python
python中resample函数实现重采样和降采样代码
2020/02/25 Python
python+Selenium自动化测试——输入,点击操作
2020/03/06 Python
python RSA加密的示例
2020/12/09 Python
python如何用matplotlib创建三维图表
2021/01/26 Python
HTML中meta标签及Keywords
2020/04/15 HTML / CSS
购买200个世界上最好的内衣品牌:Bare Necessities
2017/02/11 全球购物
Anya Hindmarch官网:奢侈设计师手袋及配饰
2018/11/15 全球购物
财务管理专业求职信
2014/06/11 职场文书
生活小常识广播稿
2014/09/16 职场文书
担保公司2015年终工作总结
2015/10/14 职场文书