(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这个库有些过时了,但是我还是想学习一下库的架构,函数式编程以及常用方法的编写这些方面的内容,又恰好没什么其它要研究的了,所以 ...
随机推荐
- Git秘籍:在 Git 中进行版本回退
导读 在这篇文章中,你将学到如何查看项目中的历史版本,如何进行版本回退,以及如何创建 Git 分支以便你可以大胆尝试而不会出现问题.快来试试吧. 在你的 Git 项目的历史中,你的位置就像是摇滚专辑中 ...
- [codevs2181]田忌赛马
[codevs2181]田忌赛马 试题描述 中国古代的历史故事"田忌赛马"是为大家所熟知的.话说齐王和田忌又要赛马了,他们各派出N匹马,每场比赛,输的一方将要给赢的一方200两黄金 ...
- word20161130
1. even 偶数 [ǒu shù][词典] even; [数] even number;[例句]在本例中,slot A中有奇数个阵列,slot B中有偶数个阵列.In this example, ...
- php中发送email
一.使用PHP内置的mail()函数 看了一下手册,就直接开始写代码了,如下 <?php $to = "test@163.com"; //收件人 $subject = &qu ...
- Ngrok搭建服务器
一.ngrok简介及作用 ngrok 是一款用go语言开发的开源软件,它是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道.下图简述了ngrok的原理. ngrok 可 ...
- win7和ubuntu双系统删除ubuntu的方法
双系统,一般是先安装win7,再装ubuntu,开机用grub引导.假如装完双系统,某一天又想恢复使用windows怎么办呢? 也许你会说,直接用win7的磁盘管理工具,格式化ubuntu所在磁盘不就 ...
- innerHtml innerText textContent兼容性问题
innerHtml,innerText,textContentinnerHtml获取元素带标签的内容:innerText只获取元素的文本:火狐不支持innerText,支持textContent: / ...
- 使用Gitosis搭建Git服务器
使用Gitosis搭建Git服务器 作者: JeremyWei | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明 网址: http://weizhifeng.net/build- ...
- ubuntu14.04 server 安装vmware worktation 12
0) Do the basic system installation of Ubuntu 14.04 LTS (Server or Desktop) 1) wget the installer wg ...
- 【Other】最近正在看的
待看: https://my.oschina.net/yunfound/blog/141222 https://www.zhihu.com/question/22925358 http://study ...