Underscore学习笔记1
项目用了很久underscore.每次都是临时查手册,没有系统的研究过,最近有空正好看看
github地址:https://github.com/lily1010/underscore_learn
一 Underscore定义
一个JavaScript实用库,提供了一整套函数式编程的实用功能,但是没有扩展任何JavaScript内置对象,它是Backbone重度依赖的js库.主要涉及对Collection、Object、Array、Function的操作.
二 _.each
(1)定位:遍历list中的所有元素,按顺序用遍历输出每个元素,不返回任何值.
(2)标准模式:_.each(list, iteratee, [context]),其中[context]是迭代器的上下文,也就是迭代器中this的指向
(3)如果数据list是数组,iteratee的参数:(element, index, list)
(4)如果数据list是对象,iteratee的参数是(value, key, list)
(5)如果存在原生的forEach方法,Underscore就使用它代替
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>underscore--each函数</title>
<script src="../js/underscore.js"></script>
</head>
<body>
<script type="text/javascript">
// 遍历数组 (可获取三个参数element, index, list)
var data = [1,2,3];
_.each(data,function(element, index, list) { //三个参数都是可选,位置固定,element是数组值,index是值在数组位置,list是整个数组
document.write(element); //打印出1 2 3
document.write(index); //打印出0 1 2
document.write(list); //打印出1,2,3 1,2,3 1,2,3,因为每次遍历都会打印一遍
}); // 遍历对象 (可获取三个参数 value,key,list)
var data2 = {
name1: "lili",
name2: "manman"
};
_.each(data2,function(value,key,list) { //注意第一个是value,第二个是key,位置固定,但参数可以缺少
document.write(value); //打印出lili manman
document.write(key); //打印出name1 name2
document.write(list); //打印出 [object Object] [object Object] ,因为循环了两边,故打印两遍
}); // 标准格式 _.each(list, iteratee, [context]) ,其中[context]是迭代器的上下文,也就是迭代器中this的指向
var obj = {name: "hello"};
_.each([1, 2, 3], function (i) {
document.write(this.name + ":" + i);
}, obj);
</script>
</body>
</html>
三 _.map
(1)定位:通过转换函数(iteratee迭代器)映射列表中的每个值,将返回的值依次存入一个新的数组.
(2)标准模式:_.map(list, iteratee, [context]),其中[context]是迭代器的上下文,也就是迭代器中this的指向.
(3)如果数据list是数组,iteratee的参数:(element, index, list)
(4)如果数据list是对象,iteratee的参数是(value, key, list)
(5)用法同each,但是它返回的是数组
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>underscore--map函数</title>
<script src="../js/underscore.js"></script>
</head>
<body>
<script type="text/javascript">
// 遍历数组后生成数组 (可获取三个参数element, index, list)
var data = [1,2,3];
_.map(data,function(element, index, list) { //三个参数都是可选,位置固定,element是数组值,index是值在数组位置,list是整个数组
document.write(element); //打印出[1,2,3]
document.write(index); //打印出0 1 2
document.write(list); //打印出1,2,3 1,2,3 1,2,3,因为每次遍历都会打印一遍
}); // // 遍历对象 (可获取三个参数 value,key,list)
var data2 = {
name1: "lili",
name2: "manman"
};
_.map(data2,function(value,key,list) { //注意第一个是value,第二个是key,位置固定,但参数可以缺少
document.write(value); //打印出lili manman
document.write(key); //打印出name1 name2
document.write(list); //打印出 [object Object] [object Object] ,因为循环了两边,故打印两遍
}); // 标准格式 _.map(list, iteratee, [context]) ,其中[context]是迭代器的上下文,也就是迭代器中this的指向
var obj = {name: "hello"};
_.each([1, 2, 3], function (i) {
document.write(this.name + ":" + i);
}, obj);
</script>
</body>
</html>
四 _.reduce
(1)标准模式:reduce_.reduce(list, iterator, memo, [context])
(2)这里不做深入探讨,参数太多,感兴趣的去官网看一下
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>underscore--reduce函数</title>
<script src="../js/underscore.js"></script>
</head>
<body>
<script type="text/javascript">
// 遍历数组
var data = [1,2,3];
_.reduce(data,function(memo, element, index, list) { //四个参数都是可选,位置固定,memo是设置一个初始值,element是数组值,index是值在数组位置,list是整个数组
document.write(memo); //打印出 4 undefined undefined
document.write(element); //打印出[1,2,3]
document.write(index); //打印出0 1 2
document.write(list); //打印出1,2,3 1,2,3 1,2,3,因为每次遍历都会打印一遍
},4); //注意4就是参数memo
</script>
</body>
</html>
五 _.find函数
(1)标准写法:_.find(list, predicate, [context])
(2)在list中逐项查找,返回第一个通过predicate迭代函数真值检测的元素值.
(3)如果没有值传递给测试迭代器将返回undefined。 如果找到匹配的元素,函数将立即返回,不会遍历整个list。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>underscore--find方法</title>
<script src="../js/underscore.js"></script>
</head>
<body>
<script type="text/javascript">
//_.find
var data = [1,2,3,4,5,6];
var aa=_.find(data,function(num) {
return num % 2 == 0;
});
console.log("数据类型是"+typeof aa+";返回值是"+aa); //打印结果是:数据类型是number;返回值是2
</script>
</body>
</html>
六 _.filter函数
(1)标准写法:_.filter(list, predicate, [context])
(2)遍历list中的每个值,返回所有通过predicate真值检测的元素值.
(3)如果没有值传递给测试迭代器将返回undefined。 如果找到匹配的元素,函数将立即返回,不会遍历整个list。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>underscore--fliter方法</title>
<script src="../js/underscore.js"></script>
</head>
<body>
<script type="text/javascript">
//_.filter
var data2 = [1,2,3,4,5,6];
var bb=_.filter(data2,function(num) {
return num % 2 == 0;
});
console.log("数据类型是"+typeof bb+";返回值是"+bb); //打印结果是:数据类型是object;返回值是2,4,6
</script>
</body>
</html>
Underscore学习笔记1的更多相关文章
- Underscore.js 源码学习笔记(下)
上接 Underscore.js 源码学习笔记(上) === 756 行开始 函数部分. var executeBound = function(sourceFunc, boundFunc, cont ...
- Underscore.js 源码学习笔记(上)
版本 Underscore.js 1.9.1 一共 1693 行.注释我就删了,太长了… 整体是一个 (function() {...}()); 这样的东西,我们应该知道这是一个 IIFE(立即执行 ...
- JavaScript学习笔记(八)——变量的作用域与解构赋值
在学习廖雪峰前辈的JavaScript教程中,遇到了一些需要注意的点,因此作为学习笔记列出来,提醒自己注意! 如果大家有需要,欢迎访问前辈的博客https://www.liaoxuefeng.com/ ...
- 《零基础学JavaScript(全彩版)》学习笔记
<零基础学JavaScript(全彩版)>学习笔记 二〇一九年二月九日星期六0时9分 前期: 刚刚学完<零基础学HTML5+CSS3(全彩版)>,准备开始学习JavaScrip ...
- 【转】Backbone.js学习笔记(二)细说MVC
文章转自: http://segmentfault.com/a/1190000002666658 对于初学backbone.js的同学可以先参考我这篇文章:Backbone.js学习笔记(一) Bac ...
- NPM 学习笔记整理
NPM 学习笔记整理 阅读 550,2017年06月04日 发布,来源:blog.ihoey.com 什么是 NPM npm 之于 Node ,就像 pip 之于 Python , gem 之于 Ru ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
随机推荐
- Raspberry Pi --操作LED
最简单的一个树莓派GPIO操作入门,这里记录以下 先上连接图: 卧槽.图真特么的大 用到了GPIO的GND和#18针脚,这就不上图了,红色的线接的是18针脚,暗色的线接的是GND针脚,下面上Pytho ...
- github上的版本和本地版本冲突的解决方法
勾选强制覆盖已有的分支(可能会丢失改动),再点击上传,上传成功. [master][~/Downloads/ios] git push -u origin master -f
- 利用SSIS发送邮件
璎Nicole珞 博客园 闪存 首页 新随笔 联系 管理 订阅 随笔- 15 文章- 0 评论- 0 SSIS 利用发送邮件服务 Send Email Task 1. 在SSIS中如何发送邮 ...
- $.ajax()方法参数详解
url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如put和 ...
- MyBatis知多少(19)MyBatis操作
若要使用iBATIS执行的任何CRUD(创建,写入,更新和删除)操作,需要创建一个的POJO(普通Java对象)类对应的表.本课程介绍的对象,将“模式”的数据库表中的行. POJO类必须实现所有执行所 ...
- [Node.js] 也说this
原文地址:http://www.moye.me/2014/11/21/也说this/ 引子 Any sufficiently advanced technology is indistinguisha ...
- iOS-图片轮播-SDCycleSCrollView的使用
介绍: SDCycleScrollView 是一款非常强大的轮播图第三方. 轮播流畅,手滑流畅.使用方便.自定义简单. 可以更改pageControl. 一. Demo地址 https://pan.b ...
- 分享一个ASP.NET 文件压缩解压类 C#
需要引用一个ICSharpCode.SharpZipLib.dll using System; using System.Collections.Generic; using System.Linq; ...
- C#设计模式——迭代器模式(Iterator Pattern)
一.概述在软件开发过程中,我们可能会希望在不暴露一个集合对象内部结构的同时,可以让外部代码透明地访问其中包含的元素.迭代器模式可以解决这一问题.二.迭代器模式迭代器模式提供一种方法顺序访问一个集合对象 ...
- 原生javascript模仿win8等待进度条。
一.序言 一直很中意win8等待提示圆圈进度条.win8刚出来那会,感觉好神奇!苦于当时没思路,没去研究.通过最近网上找找资料,终于给搞出来了!先上Demo,献丑了!预览请看:win8进度条. 二.简 ...