underscore.js学习笔记

最近项目需要,开始学习underscore.js,在css88网站上看到有中文API,边看边记录自己能理解的笔记;

以下内容,函数以及部分解释抄自css88愚人码头中文API

内容还在整理中,发出部分

/**
*@方法参数解释
*iterator 为迭代器,该函数会获取前面数组或者对象的值作为参数传入,并且一个个进行处理
* predicate 为真值检测,该函数会将前面数组或者对象的值作为参数传入,并根据函数内容进行判断,如果能匹配上则返回true,否则返回false
* @函数参数解释
* list 数组或对象本身
* properties 对象部分,一般用于判断前面的对象或者数组是否含有该部分内容
* memo 初始值,为空;用到的函数有reduce,reduceRight,多用于迭代器函数(iterator)
* element 函数的使用对象为数组时,会使用到该参数,指数组的子项,多用于迭代器函数(iterator)
* index 函数的使用对象为数组时,会使用到该参数,指的是使用的子项的排列位置(其实名字就很明显了),多用于迭代器函数(iterator)
* value 函数使用对象为对象时,会用到该函数,指对象的某一属性的值,多用于迭代器函数(iterator)
* key 函数使用对象为对象时,会用到该函数,指对象的某一属性,多用于迭代器函数(iterator)
*/

/*集合函数*/

/**
* each函数 _.each(list, iterator, [context])
* each函数是将前面的参数进行迭代处理
* 如果是数组的话,后续函数的参数为element(数组内容),index(对应排序号),list(数组本身)
* 如果是对象的话,后续函数的参数为value(值),key(键),list(对象本身)
* num @type {number}
*/
var num = 0;
var eachResult = _.each([1, 2, 3],function(ele,index,list){
//num += ele;
//alert(ele);
//alert(index);
});
_.each({one: 1, two: 2, three: 3}, function(val,key){
//console.log(key+":"+val);
});

/**
* map函数 .map(list, iterator, [context])
* map函数通过迭代器将list中的每个element(or value)映射到新的数组上(自动构建新数组返回出来)
*数组时函数参数为element,index,list
*对象时函数参数为value,key,list
*/
_.map([1, 2, 3], function(ele,index,list){
//console.log(ele);
//console.log(index);
//console.log(list);
return ele * 3;
});
_.map({one: 1, two: 2, three: 3}, function(value, key,list){
return value * 3;
});

/*reduce函数 _.reduce(list, iterator, memo, [context])
* 将集合中每个元素放入迭代处理器, 并将本次迭代的返回值作为"memo"传递到下一次迭代, 一般用于累计结果或连接数据
*数组时参数为memo,ele,index,list
* 对象时参数为memo,value,key,list
*/
_.reduce([1, 2, 3], function(memo, num){
//return memo + num;
}, 0);
//console.log(flat);

/*reduceRight函数 _.reduceRight(list, iterator, memo, [context])
* 与reduce函数一样,只是顺序从右往左
*/
var list = [[0, 1], [2, 3], [4, 5]];
//concat链接数组
var flat = _.reduceRight(list, function(a, b) { return a.concat(b); }, []);

/**
* find函数 _.find(list, predicate, [context])
* 寻找数组中能通过函数匹配的内容,返回第一个数字并理解结束函数
* find函数参数为list(数组)、函数
*/
var even = _.find([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });
//=>2 返回2之后立刻结束函数

/**
*filter函数 _.filter(list, predicate, [context])
* 与find函数类似,区别是会返回全部能通过函数的值,并组成一个新的数组返回出来
*/

var evens = _.filter([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });
//=> [2, 4, 6] 返回一个新函数

/**
* where函数 _.where(list, properties)
*参数为list、properties(对象)
* 返回list中含有properties部分的数据
*/
listOfPlays = [{title: "Cymbeline", author: "Shakespeare", year: 1611},
{title: "The Tempest", author: "Shakespeare", year: 1611},{title: "The Tempest", author: "11", year: 1611}];
var where = _.where(listOfPlays, {author: "Shakespeare", year: 1611});
//console.log(where);

/**
*findWhere函数 _.findWhere(list, properties)
*参数为list、properties(对象)
* 遍历list中的每一个值,返回匹配properties所列出的属性的所有的键 - 值对的第一个值。
* 如果没有找到匹配的属性,或者list是空的,那么将返回undefined。
*/
var publicServicePulitzers= [{year: 1918, newsroom: "The New York Times",
reason: "For its public service in publishing in full so many official reports,documents and speeches by European statesmen relating to the progress andconduct of the war."}];
_.findWhere(publicServicePulitzers, {newsroom: "The New York Times"});
/*=> {year: 1918, newsroom: "The New York Times",
reason: "For its public service in publishing in full so many official reports,
documents and speeches by European statesmen relating to the progress and
conduct of the war."}
*/

/**
*reject函数 _.reject(list, predicate, [context])
*返回没有通过predicate真值检测的元素集合,与filter相反
* 参数为list,predicate
*/
var odds = _.reject([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });
//=> [1, 3, 5] 不通过检测的数据组成一个新数组返回

/**
* every函数 _.every(list, [predicate], [context])
*如果list中的所有元素能通过predicate的真值检测就返回true
* predicate函数内需要用return返回出检测真值的函数
*/
var result =_.every([1,2,3,4,5],function(ele,index,list){
//console.log(ele);
//console.log(index);
//console.log(list);
return ele >=1;
});
//console.log(result);

/**
* some函数 _.some(list, [predicate], [context])
*如果list中有任何一个元素通过 predicate 的真值检测就返回true。一旦找到了符合条件的元素, 就直接中断对list的遍历.
*/
var someresult = _.some([null,0,‘yes‘,false],function(ele,index,list){
//console.log(ele);
//console.log(index);
//console.log(list);
return ele >=1;
});
//console.log(someresult);

/**
* contains_.contains(list, value)
*如果list包含指定的value则返回true(愚人码头注:使用===检测)。如果list 是数组,内部使用indexOf判断。
*/
var containsResult1 = _.contains([1,2,3],2);
var containsResult2 = _.contains({title:1,name:2,age:3},2);
//console.log(containsResult1);
//console.log(containsResult2);

//todo 不能理解methodName从哪来的,目前理解为获取相同名字的函数并传参数进去
/**
* invoke函数 _.invoke(list, methodName, *arguments)
* 在list的每个元素上执行methodName方法。 任何传递给invoke的额外参数,invoke都会在调用methodName方法的时候传递给它。
*/
var invokeResult = _.invoke([[5, 1, 7], [3, 2, 1]], ‘sort‘);
//console.log(invokeResult);

/**
* pluck _.pluck(list, propertyName)
* 获取对象数组中某个属性,获取所有该属性的值并形成一个新的数组返回
*/
var pluckStooges = [{name: ‘moe‘, age: 40}, {name: ‘larry‘, age: 50}, {name: ‘curly‘, age: 60}];
_.pluck(pluckStooges, ‘name‘);
// => ["moe", "larry", "curly"]

/**
* max _.max(list, [iterator], [context])
* 返回list中的最大值。如果传递iterator参数,iterator将作为list排序的依据。
* 如下例:判断最大值的根据是stooge.age,写在iterator函数中,原理可认为是将该属性的值进行排序后,取出最大的值并获取该对象
*/
var maxStooges = [{name: ‘moe‘, age: 40}, {name: ‘larry‘, age: 50}, {name: ‘curly‘, age: 60}];
_.max(maxStooges, function(stooge){ return stooge.age; });
//=> {name: ‘curly‘, age: 60};

/**
* min _.min(list, [iterator], [context])
*/
时间: 2024-10-08 02:52:09

underscore.js学习笔记的相关文章

【转】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 // 路由

Vue.js学习笔记:在元素 和 template 中使用 v-if 指令

f 指令 语法比较简单,直接上代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title></title> <script src="https://cdn.bootcss.com/vue/2.2.

[Pro Angular.JS]学习笔记1.1:设置开发环境

可以使用yeoman.io,很方便.我已经写了一篇随笔,介绍如何使用.这里也有一篇介绍的文章:http://www.cnblogs.com/JoannaQ/p/3756281.html 代码编辑器,在Mac下用了一下WebStorm,太恶心了.另外发现书的作者使用的开发环境是Windows + VS Express 2013,为了方便学习,我也使用VS Express 2013 Update2.VS2013用起来蛮舒服的,把WebStorm比得跟驼屎一样.也许是因为我没用习惯吧. 1.安装Nod

Angular JS 学习笔记

特定领域语言 编译器:遍历DOM来查找和它相关的属性, 分为编译和链接两个阶段, 指令:当关联的HTML结构进入编译阶段时应该执行的操作,可以写在名称里,属性里,css类名里:本质上是函数 稳定的DOM:绑定了数据模型的DOM元素的实例不会在绑定的生命周期发生改变 作用域:用来检测模型的改变和为表达式提供执行上下文的 AngularJS 和其它模板系统不同,它使用的是DOM而不是字符串 指令: 由某个属性.元素名称.css类名出现而导致的行为,或者说是DOM的变化 Filter过滤器:扮演着数据

Node.js学习笔记(3) - 简单的curd

这个算是不算完结的完结吧,前段时间也是看了好久的Node相关的东西,总想着去整理一下,可是当时也没有时间: 现在看来在整理的话,就有些混乱,自己也懒了,就没在整理,只是简单的记录一下 一.demo的简单介绍 这次demo,只涉及到简单的curd操作,用到的数据库是mongo,所以要安装mongo数据库,数据库连接驱动是mongoose: 当然关于mongo的驱动有很多,比如mongous mongoskin等:(详见http://cnodejs.org/topic/4f4ca8e0940ce2e

JS学习笔记-OO疑问之封装

封装是面向对象的基础,今天所要学习的匿名函数与闭包就是为了实现JS的面向对象封装.封装实现.封装变量,提高数据.系统安全性,封装正是面向对象的基础. 匿名函数 即没有名字的函数,其创建方式为 function(){...} 单独存在的匿名函数,无法运行,可通过赋值给变量调用或通过表达式自我执行来实现运行. 1.赋值给变量为一般的函数使用方式 var run = function(){ return '方法运行中'; }; alert(run()); 2.通过表达式自我执行 (function(a

每日js学习笔记2014.5.4

<script language="javascript">var mystring = "这是第一个正则表达式的例子";var myregex = new RegExp("这是"); //创建正则表达式if (myregex.test(mystring)) //test的功能是查找字符串中是否有匹配项,有则返回true,没有则返回false{ document.write ("找到了指定的模式");}else{

每日js学习笔记2014.5.5

<script language="javascript"><!-- var textstr = prompt("请输入一个字符串:",""); //prompt的用法,包含两个参数 var regex = /[A-Z][a-z]tion/; //[A-Z]有无匹配项 var result = regex.test(textstr); //test的用法 document.write ("<font size='

JS学习笔记-OO疑问之对象创建

问一.引入工厂,解决重复代码 前面已经提到,JS中创建对象的方法,不难发现,基本的创建方法中,创建一个对象还算简单,如果创建多个类似的对象的话就会产生大量重复的代码. 解决:工厂模式方法(添加一个专门创建对象的方法,传入参数避免重复) function createObject(name,age){ var obj =new Object(); //创建对象 obj.name = name; obj.age = age; obj.run = function(){ return this.nam