(2)Underscore.js常用方法
从其他语言转向Javascript时,通常都会遇到一些困惑性问题。比如,Java中的HashMap在Javascript中如何实现?Javascript面向对象式编程如何实现继承?如何实现通用的iterator对集合对象做遍历?如何对Array实现快速排序?….
如果你真的可以自己实现这些功能,那么你的Javascript基础很扎实的!我很佩服你!但对于大部分人来说,这些基础功能应该是由底层API支持的,就像JDK一样。Underscore为我们提供了这样的一个实用工具包,而且它真的很实用!
只有你动手做了,你才能有收获。
(2)Underscore.js常用方法
_.map(list, iteratee, [context])
Alias: collect - / 数组
- var map1 = _.map([1, 2, 3], function(num){ return num * 3; });
- console.log(map1);// [3, 6, 9]
- // 对象
- var map2 =_.map({one : 1, two : 2, three : 3}, function(num, key){ return num * 3; });
- console.log(map2);// [3, 6, 9]
_.each(list, iteratee, [context])
Alias: forEach - _.each([1, 2, 3], alert);
- _.each({one : 1, two : 2, three : 3}, alert);
- var sum = _.reduce([1, 2, 3], function(memo, num){ return memo + num; }, 0);
- console.info(sum) //6
- var result = _.reduce([2,4,6,8,10],function(memo, value, idx, arr) {
- //memo:是reduce函数的初始值:2,6,12,20
- //value:迭代的当前值:4,6,8,10
- //idx:迭代的index:1,2,3,4
- //arr:整个list:[2, 4, 6, 8, 10]
- return memo + value;
- });
- //30
- console.info(result);
_.shuffle(list)
- var shuffle = _.shuffle([1, 2, 3, 4, 5, 6]);
- console.log(shuffle)
- // [4, 1, 6, 3, 5, 2]
- // [6, 4, 3, 1, 2, 5]
- // [6, 3, 2, 4, 1, 5]
- // [1, 2, 5, 4, 6, 3]
_.every(list, [predicate], [context])
Alias: all - var _everyResult = _.every([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });
- console.log(_everyResult)
- // false
_.some(list, [predicate], [context])
Alias: any - var _someResult = _.some([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });
- console.log(_someResult);
- //true
_.size(list)
- var sizeResult = _.size({one : 1, two : 2, three : 3});
- var sizeResult2 = _.size([1, 2, 3, 4, 5, 6]);
- console.info(sizeResult);// 3
- console.info(sizeResult2);//6
_.filter(list, predicate, [context])
Alias: select - var _filterResult = _.filter([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });
- console.log(_filterResult);
- // [2, 4, 6]
_.reject(list, predicate, [context])
- _.reject([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });
- // [1, 3, 5]
_.find(list, predicate, [context])
Alias: detect - var _findResult = _.find([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });
- console.log(_findResult);
- // 结果为true的:2
_.contains(list, value, [fromIndex])
Alias: includes - _.contains([1, 2, 3], 3);
- // true
_.countBy(list, iteratee, [context])
- _.countBy([1, 2, 3, 4, 5], function(num) {
- return num % 2 == 0 ? 'even' : 'odd';
- });
- // {odd: 3, even: 2}
_.toArray(list)
- _.toArray({a:0,b:1,c:2});
- // [0, 1, 2]
_.pluck(list, propertyName)
- var stooges = [{name : 'moe', age : 40}, {name : 'larry', age : 50}, {name : 'curly', age : 60}];
- var _pluckResult = _.pluck(stooges, 'name');
- console.log(_pluckResult);
- // ["moe", "larry", "curly"]
1bind
_.bind(function, object, *arguments)
例子1
- var o = {
- p: 2,
- m: function (){console.log(this.p);}
- };
- o.m()
- //console.log(this.p): 2
- _.bind(o.m,{p:1})()
- //console.log(this.p): 1
例子3

2bindAll
_.bindAll(object, *methodNames)
- var o = {
- p1 : '123',
- p2 : '456',
- m1 : function() { console.log(this.p1); },
- m2 : function() { console.log(this.p2); },
- };
- _.bindAll(o, 'm1', 'm2');
3partial
_.partial(function, *arguments)
- /////////
- // 例子1
- /////////
- var add = function(a, b) {
- return a + b;
- };
- add5 = _.partial(add, 5);
- add5(10);
- //add = function(a=5,b=10)
- // 15
- /////////
- // 例子2
- /////////
- var subtract = function(a, b) {
- return b - a;
- };
- sub5 = _.partial(subtract, 5);
- sub5(20);
- //subtract = function(a=5,b=20)
- //15
- //////////////////////////////////////
- // 例子3
- // Using a placeholder(这里的20是第3个参数)
- //////////////////////////////////////
- subFrom20 = _.partial(subtract, _, 20);
- subFrom20(5);
- //subtract = function(a=5,b=20)
- //15
4wrap
_.wrap(function, wrapper)
- var hello = function(name) { return "hello: " + name; };
- hello = _.wrap(hello, function(func) {
- return "before, " + func("moe") + ", after";
- });
- hello();
- // 'before, hello: moe, after'
5compose
_.compose(*functions)
- var greet = function(name){ console.log( "hi: " + name )};
- var exclaim = function(statement){ console.log( statement + "!")};
- var welcome = _.compose(exclaim, greet);
- welcome('moe');
- // 'hi: moe!'
1memoize
_.memoize(function, [hashFunction])
- var fibonacci = _.memoize(function(n) {
return n < ? n : fibonacci(n - ) + fibonacci(n - );
});
2delay
_.delay(function, wait, *arguments)
- var log = _.bind(console.log, console);
_.delay(log, , 'logged later');
// 'logged later' -- Appears after one second.
3defer
_.defer(function, *arguments)
- _.defer(function(){ alert('deferred'); });
// Returns from the function before the alert runs.
4throttle
_.throttle(function, wait, [options])
- // 返回updatePosition函数的新版本
- var
throttled =
- _
.throttle(updatePosition,
);
- // 新版本的函数每过100毫秒才会触发一次
- $
(
- window
).
- scroll
(throttled);
5debounce
_.debounce(function, wait, [immediate])
- $("button").on("click", _.debounce(submitForm, , true));
6once
_.once(function)
- var initialize = _.once(createApplication);
initialize();
initialize();
// Application只被创造一次
7after
_.after(count, function)
- var renderNotes = _.after(notes.length, render);
_.each(notes, function(note) {
note.asyncSave({success: renderNotes});
});
- _.(users)
.filter(function(user) { return user.name === name })
.sortBy(function(user) { return user.karma })
.first()
.value()
_.template(templateString)([settings])
- _
.template(
- templateString)(
[
- data
], [
- settings
])
1templateString
- var txt = "<h2><%= word %></h2>";
- var _html = _.template(txt)({word : "Hello World"});
- //console.log(_html)
- // "<h2>Hello World</h2>"
- var txt = "<h2><%- word %></h2>";
- _.template(txt)({word : "H & W"})
- // <h2>H & W</h2>
- var txt = "<% var i = 0; if (i<1){ %>"
- + "<%= word %>"
- + "<% } %>";
- _.template(txt)({word : "Hello World"})
- // Hello World
- var list = "<% _.each(people, function(name) { %> <li><%= name %></li> <% }); %>";
- _.template(list)({people : ['moe', 'curly', 'larry']});
- // "<li>moe</li><li>curly</li><li>larry</li>"
- var t1 = _.template("Hello <%=user%>!");
- t1({ user: "<Jane>" })
- // 'Hello <Jane>!'
- //对象赋值
- _html = _.template("Using 'with': <%= data.answer %>", {variable: 'data'})({answer: 'no'});
- console.log(_html)
- // "Using 'with': no"
2data
- _.template("Hello <%=user%>!", { user: "" })
- _.template("Hello <%=obj.user%>!", { user: "" })
- _.template("<%if (data.title) { %>Title: <%= title %><% } %>", null,{ variable: "data" });
(2)Underscore.js常用方法的更多相关文章
- underscore.js常用方法整理(慢慢完善)
整理自Underscore.js (1.8.3) 中文文档,http://www.css88.com/doc/underscore/ 1. extend _.extend() 复制对象中的所有属性到目 ...
- Underscore.js 入门-常用方法介绍
Underscore.js是一个很精干的库,压缩后只有4KB.它提供了几十种函数式编程的方法,弥补了标准库的不足,大大方便了JavaScript的编程.MVC框架Backbone.js就将这个库作为自 ...
- Underscore.js使用
Underscore 是一个 JavaScript 工具库,它提供了一整套函数式编程的实用功能,但是没有扩展任何 JavaScript 内置对象. 他解决了这个问题:"如果我面对一个空白的 ...
- underscore.js源码研究(8)
概述 很早就想研究underscore源码了,虽然underscore.js这个库有些过时了,但是我还是想学习一下库的架构,函数式编程以及常用方法的编写这些方面的内容,又恰好没什么其它要研究的了,所以 ...
- underscore.js源码研究(7)
概述 很早就想研究underscore源码了,虽然underscore.js这个库有些过时了,但是我还是想学习一下库的架构,函数式编程以及常用方法的编写这些方面的内容,又恰好没什么其它要研究的了,所以 ...
- underscore.js源码研究(6)
概述 很早就想研究underscore源码了,虽然underscore.js这个库有些过时了,但是我还是想学习一下库的架构,函数式编程以及常用方法的编写这些方面的内容,又恰好没什么其它要研究的了,所以 ...
- underscore.js源码研究(5)
概述 很早就想研究underscore源码了,虽然underscore.js这个库有些过时了,但是我还是想学习一下库的架构,函数式编程以及常用方法的编写这些方面的内容,又恰好没什么其它要研究的了,所以 ...
- underscore.js源码研究(4)
概述 很早就想研究underscore源码了,虽然underscore.js这个库有些过时了,但是我还是想学习一下库的架构,函数式编程以及常用方法的编写这些方面的内容,又恰好没什么其它要研究的了,所以 ...
- underscore.js源码研究(3)
概述 很早就想研究underscore源码了,虽然underscore.js这个库有些过时了,但是我还是想学习一下库的架构,函数式编程以及常用方法的编写这些方面的内容,又恰好没什么其它要研究的了,所以 ...
随机推荐
- ubuntu 出现g++ : Depends: g++-4.8 (>= 4.8.2-5~) but it is not going to be installed
Ubuntu 你可以安装搜狗输入法也可以使用sunpingyin,看个人爱好. 唯一要注意的是,不能把系统的更新关了,否则会出现一大堆的问题,连g++都无法安装. 在设置里面: 我以前有一个很不好的习 ...
- 4. 如何解释dalvik字节码
如何解释dalvik字节码 文档: 在Android系统源码目录dalvik\docs有相关指令文档 dalvik-bytecode.html 实战: 来直接实战模拟来理解枯燥的理论 用IDA打开一个 ...
- JSP工作原理
一.历史 JSP是Servlet的扩展,JSP没出现之前,就已经出现了Servlet技术.Servlet是利用了"输出流",动态的生成了HTML页面.包括 每一个HTML标签和所有 ...
- HTML 返回顶部的样式
.fhdb{ width:50px; height:50px; position:fixed; //可以用来定义元素的固定定位. right:20px; //距离右侧20像素 botto ...
- fstream的使用方法介绍
转载自: fstream的使用方法介绍 - saga's blog - C++博客 http://www.cppblog.com/saga/archive/2007/06/19/26652.html ...
- DIV UL LI
<style type="text/css"> .productDetailTabNav{ width:960px;} .productDetailTabNav ul{ ...
- Unity3d《Shader篇》变胖
变胖前 变胖后 //Shader Shader "Custom/NormalExt" { Properties { _MainTex("Base (RGB)", ...
- Oracle10g下载地址--多平台下的32位和64位
前段时间ORACLE把10G的下载从官网拿掉了 ,许多童鞋不知道ORACLE 10g 的下载地址,这里我附上oracle 10g 下载的链接,方便大家下载. 点击链接使用迅雷即可下载. ...
- 配置IIS,Apache,PHP过程中遇到的一些问题
下载了eclipse的最新版本,并且添加了PHP插件.为了支持多语言,决定采用UTF-8编码.但是在开发的过程中,发现代码的自动提示帮助信息显示的是乱码,PHP源文件及注释,均正常.在网上查了很多资料 ...
- shell变量判空几种方法
强烈声明:关于对数字的比较以及判断是否为空 最好在外层添加""引起来,这样可以避免空与其他字符比较时报错的问题. 1. 变量通过" "引号引起来 #!/bin/ ...