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>
时间: 2024-12-07 22:40:31

Underscore学习笔记1的相关文章

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

文章转自: http://segmentfault.com/a/1190000002666658 对于初学backbone.js的同学可以先参考我这篇文章:Backbone.js学习笔记(一) Backbone源码结构 1: (function() { 2: Backbone.Events // 自定义事件 3: Backbone.Model // 模型构造函数和原型扩展 4: Backbone.Collection // 集合构造函数和原型扩展 5: Backbone.Router // 路由

Data Types in the Kernel &lt;LDD3 学习笔记&gt;

Data Types in the Kernel Use of Standard C Types /* * datasize.c -- print the size of common data items * This runs with any Linux kernel (not any Unix, because of <linux/types.h>) * * Copyright (C) 2001 Alessandro Rubini and Jonathan Corbet * Copyr

backbonejs学习笔记

Backbone是一个轻量级的前端MVC框架,用于结构化管理页面中的大量JS,建立与服务器.视图间的无缝连接,为构建复杂的应用提供基础框架.最适合的应用场景是单页面应用,并且页面上有大量数据模型,模型之间需要进行复杂的信息沟通.backbone所依赖的underscore类库提供了60多个函数用于处理数组操作.函数绑定以及javascript模板机制. 在Backbone中,DOM选择器.DOM事件和AJAX,都使用了jQuery的方法.如果不想使用jQuery或Zepto,而是使用其它的.或自

Backbone学习笔记

MVC 爱创课堂今日分享-Backbone学习笔记 M表示模型V表示视图C表示控制器MVC最早出现在smalltalk语言中,MVC分别表示模型,视图,控制器,模型通常指的是数据,视图通常是它能看到的页面,控制器通常表示一些交互等等,MVC根据前后端的划分,又有不同的含义对于后端来说M(Model)模型,通常指的是底层的数据,例如对数据库操作数据的封装等V(View)视图,向前端输出的视图等等,包括渲染视图,创建视图等等C(Controller)控制器,指的是对模型以及视图的操作,例如获取请求,

vector 学习笔记

vector 使用练习: /**************************************** * File Name: vector.cpp * Author: sky0917 * Created Time: 2014年04月27日 11:07:33 ****************************************/ #include <iostream> #include <vector> using namespace std; int main

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详细,自己在看它的文档和代码时写了一些demo和笔记,还有它实现的原理记录一下 学习Caliburn.Micro要有MEF和MVVM的基础 先说一下他的命名规则和引导类 以后我会把Caliburn.Micro的 Actions IResult,IHandle ICondu

jQuery学习笔记(一):入门

jQuery学习笔记(一):入门 一.JQuery是什么 JQuery是什么?始终是萦绕在我心中的一个问题: 借鉴网上同学们的总结,可以从以下几个方面观察. 不使用JQuery时获取DOM文本的操作如下: 1 document.getElementById('info').value = 'Hello World!'; 使用JQuery时获取DOM文本操作如下: 1 $('#info').val('Hello World!'); 嗯,可以看出,使用JQuery的优势之一是可以使代码更加简练,使开

[原创]java WEB学习笔记93:Hibernate学习之路---Hibernate 缓存介绍,缓存级别,使用二级缓存的情况,二级缓存的架构集合缓存,二级缓存的并发策略,实现步骤,集合缓存,查询缓存,时间戳缓存

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

Activiti 学习笔记记录(三)

上一篇:Activiti 学习笔记记录(二) 导读:上一篇学习了bpmn 画图的常用图形标记.那如何用它们组成一个可用文件呢? 我们知道 bpmn 其实是一个xml 文件