项目用了很久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的更多相关文章

  1. Underscore.js 源码学习笔记(下)

    上接 Underscore.js 源码学习笔记(上) === 756 行开始 函数部分. var executeBound = function(sourceFunc, boundFunc, cont ...

  2. Underscore.js 源码学习笔记(上)

    版本 Underscore.js 1.9.1 一共 1693 行.注释我就删了,太长了… 整体是一个 (function() {...}());  这样的东西,我们应该知道这是一个 IIFE(立即执行 ...

  3. JavaScript学习笔记(八)——变量的作用域与解构赋值

    在学习廖雪峰前辈的JavaScript教程中,遇到了一些需要注意的点,因此作为学习笔记列出来,提醒自己注意! 如果大家有需要,欢迎访问前辈的博客https://www.liaoxuefeng.com/ ...

  4. 《零基础学JavaScript(全彩版)》学习笔记

    <零基础学JavaScript(全彩版)>学习笔记 二〇一九年二月九日星期六0时9分 前期: 刚刚学完<零基础学HTML5+CSS3(全彩版)>,准备开始学习JavaScrip ...

  5. 【转】Backbone.js学习笔记(二)细说MVC

    文章转自: http://segmentfault.com/a/1190000002666658 对于初学backbone.js的同学可以先参考我这篇文章:Backbone.js学习笔记(一) Bac ...

  6. NPM 学习笔记整理

    NPM 学习笔记整理 阅读 550,2017年06月04日 发布,来源:blog.ihoey.com 什么是 NPM npm 之于 Node ,就像 pip 之于 Python , gem 之于 Ru ...

  7. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  8. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  9. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

随机推荐

  1. Backbone1.0.0数据验证的变化

    0.5.3版本对Model数据验证时,绑定Error就可以了: (function(){ var Model = Backbone.Model.extend({ initialize : functi ...

  2. 安卓开发笔记——深入Activity

    在上一篇文章<安卓开发笔记——重识Activity >中,我们了解了Activity生命周期的执行顺序和一些基本的数据保存操作,但如果只知道这些是对于我们的开发需求来说是远远不够的,今天我 ...

  3. 二十七、EFW框架BS系统开发中的MVC模式探讨

    回<[开源]EFW框架系列文章索引>        EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://p ...

  4. php分页类代码带分页样式效果(转)

    php分页类代码,有漂亮的分页样式风格 时间:2016-03-16 09:16:03来源:网络 导读:不错的php分页类代码,将类文件与分页样式嵌入,实现php查询结果的精美分页,对研究php分页原理 ...

  5. Qt5 从头学(1)-- 环境

    对我来说MFC太过麻烦了,同样是桌面开发工具,Qt就完全不一样了.Qt使用C++语言可以轻松实现"一次编写,到处编译"的跨平台性能,并且可以做出很多炫酷的界面效果.目前支持几乎所有 ...

  6. 爬虫技术 -- 基础学习(四)HtmlParser基本认识

    利用爬虫技术获取网页源代码后,针对网页抽取出它的特定文本内容,利用正则表达式和抽取工具,能够更好地抽取这些内容. 下面介绍一种抽取工具 -- HtmlParser HtmlParser是一个用来解析H ...

  7. NOP登录验证管理

    截取Nop登录代码如下: 其实 public ActionResult Login(LoginModel model, string returnUrl, bool captchaValid) { / ...

  8. 值得拥有!精心推荐几款超实用的 CSS 开发工具

    当你开发一个网站或 Web 应用程序的时候,有合适的工具,绝对可以帮助您节省大量的时间.在这篇文章中,我为大家收集了超有用的 CSS 开发工具. 对于 Web 开发人员来说,找到有用的 CSS 开发工 ...

  9. Gradle学习系列之五——自定义Property

    在本系列的上篇文章中,我们讲到了增量式构建,在本篇文章中,我们将讲到如何自定义Project的Property. 请通过以下方式下载本系列文章的Github示例代码: git clone https: ...

  10. 组合数学 + STL --- 利用STL生成全排列

    Ignatius and the Princess II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K ( ...