(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这个库有些过时了,但是我还是想学习一下库的架构,函数式编程以及常用方法的编写这些方面的内容,又恰好没什么其它要研究的了,所以 ...
随机推荐
- python 数据结构 初学时没太注意却发现很有用的点点滴滴
1. list.extend(L) 将指定列表中的所有元素附加到另一个列表的末尾:相当于a[len(a):] = L. 2. list.pop([i]) 删除列表中指定位置的元素并返回它.如果未指定索 ...
- php中0," ",null和false的区别
php中很多还不懂php中0,"",null和false之间的区别,这些区别有时会影响到数据判断的正确性和安全性,给程序的测试运行造成很多麻烦.先看一个例子: <? $str ...
- nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器[转]
转 :http://redstarofsleep.iteye.com/blog/2123752 Nginx本身是一个非常出色的HTTP服务器,FFMPEG是非常好的音视频解决方案.这两个东西通过一个n ...
- 全部springxml文件约束 applicationContext.xml
<?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.sp ...
- centos mysqldb 安装
yum install mysql-devel.x86_64 yum install python-devel pip install MySQL-python
- 【leetcode】Substring with Concatenation of All Words
Substring with Concatenation of All Words You are given a string, S, and a list of words, L, that ar ...
- nginx server中的server_name配置的域名在客户机上无法访问
nginx配置如下: nginx.conf: #user nobody; worker_processes 2; #error_log logs/error.log; #error_log logs/ ...
- hdu4117
题意:给出一串单词,每个有一个权值.顺序不变的情况下,删掉一些,使得相邻两单词,前一个是后一个的子串.同时要求使得剩余单词权值和最大.求最大是多少. 分析: AC自动机+线段树+DP. 这是一个比较复 ...
- Core Data 多线程时多个context使用
原文地址:http://blog.csdn.net/willmomo/article/details/19759413 写的非常好!我这里截取一点重要的,备份,请去原地址阅读! 本人去年10月份才接触 ...
- 服务器×××上的MSDTC不可用解决办法
MSDTC(分布式交易协调器),协调跨多个数据库.消息队列.文件系统等资源管理器的事务.该服务的进程名为Msdtc.exe,该进程调用系统Microsoft Personal Web Server和M ...