目录
underscore简介
- 意为下划线
- 它提供了一整套函数式编程的实用功能,但是没有扩展任何 JavaScript 内置对象
- 它弥补了 jQuery 没有实现的功能,同时又是 Backbone 必不可少的部分
工具函数(Utility)
- noConflict
- identity
- constant
- noop
- times
- random
- mixin
- iteratee
- uniqueId
- escape
- unescape
- result
- now
- template
var times_res = _(4).times(function(index){return index;});
var random_res = _.random(10,100);
_.mixin({
toUpperCase:function(x){
return x.toUpperCase();
}
})
var escape_res = _.escape("<div></div>");
var unescape_res = _.unescape("<div></div>");
console.log(times_res);
console.log(random_res);
console.log(_("zhangkai").toUpperCase());
console.log(escape_res);
console.log(unescape_res);
对象函数(Object Functions)
- keys
- values
- pairs
- invert
- functions
- extend
- pick
- omit
- defaults
- clone
- tap
- has
- matches
- property
- isEqual
- isEmpty
- isElement
- isArray
- isObject
- isArguments
- isFunction
- isString
- isNumber
- isFinite
- isBoolean
- isDate
- isRegExp
- isNaN
- isNull
- isUndefined
var list = {one: 1, two: 2, three: 3};
var clone_list = {one:1,two:{a:1}};
list.show = function(){
console.log(this.one);
}
var keys_res = _.keys(list);
var values_res = _.values(list);
var pairs_res = _.pairs(list);
var invert_res = _.invert(list);
var functions_res = _.functions(list);
var extend_res = _.extend({a:1},{b:2});
var pick_res = [
_.pick({name: 'moe', age: 50, userid: 'moe1'}, 'name', 'age'),
_.pick({name: 'moe', age: 50, userid: 'moe1'}, function(value, key, object) {
return _.isNumber(value);
})
]
var omit_res = [
_.omit({name: 'moe', age: 50, userid: 'moe1'}, 'name', 'age'),
_.omit({name: 'moe', age: 50, userid: 'moe1'}, function(value, key, object) {
return _.isNumber(value);
})
]
var defaults_res = _.defaults({a:1,b:2,d:undefined},{a:111,c:3,d:4});
var clone_res = _.clone(clone_list);
clone_list.two.a = 11111;
var tap_res = _.chain([1,2,3,200])
.filter(function(num) { return num % 2 == 0; })
.tap(console.log)
.map(function(num) { return num * num })
.value();
var has_res = _.has(list,"two");
var property_res = _.property("three")(list);
var isEqual_res = _.isEqual({},{});
var isEmpty_res = [
_.isEmpty([]),
_.isEmpty({})
]
var isElement_res = _.isElement(document.getElementsByTagName("body")[0]);
console.log(keys_res);
console.log(values_res);
console.log(pairs_res);
console.log(invert_res);
console.log(functions_res);
console.log(extend_res);
console.log(pick_res);
console.log(omit_res);
console.log(defaults_res);
console.log(clone_res);
console.log(has_res);
console.log(property_res);
console.log(isEqual_res);
console.log(isEmpty_res);
console.log(isElement_res);
函数(Functions)
- bind
- bindAll
- partial
- memoize
- delay
- defer
- throttle
- debounce
- once
- after
- before
- wrap
- negate
- compose
var _bind = function(x){return x + " " + this.name};
var bind_fun = _.bind(_bind,{name:"zhangkai"},"hello");
console.log(bind_fun());
var buttonView = {
label : 'underscore',
onClick: function(){ alert('clicked: ' + this.label); },
onHover: function(){ console.log('hovering: ' + this.label); }
};
_.bindAll(buttonView, 'onClick', 'onHover');
var _once = function(){console.log(111);};
var __once = _.once(_once);
__once();
var _fun1 = function(x){return x + 100};
var _fun2 = function(x){return x * 5};
var _fun3 = _.compose(_fun1,_fun2);
console.log(_fun3(100));
数组函数(Array Functions)
- first
- initial
- last
- rest
- compact
- flatten
- without
- union
- intersection
- difference
- uniq
- zip
- object
- indexOf
- lastIndexOf
- sortedIndex
- range
var arr = [1,2,3,4,5,6,7,8,9];
function unique(x){
return x.age;
}
var first_res = _.first(arr,4);
var initial_res = _.initial(arr,2);
var last_res = _.last(arr,2);
var rest_res = _.rest(arr,2);
var compact_res = _.compact(["",null,NaN,undefined,12,"sting"],2);
var flatten_res = _.flatten([1,2,[3,[4]]]);
var without_res = _.without(arr,1,2,3,9);
var union_res = _.union([1, 2, 3], [101, 2, 1, 10], [2, 1]);
var difference_res = _.difference([1, 2, 3,99], [101, 2, 1, 10]);
var intersection_res = _.intersection([1, 2, 3], [101, 2, 1, 10], [2, 1]);
var unique_res = _.unique([{name:"zk",age:18},{name:"gs",age:22},{name:"zq",age:18}],false,unique);
var zip_res = _.zip(
['moe', 'larry', 'curly'], [30, 40, 50], [true, false, false]
);
var object_res = [
_.object(['moe', 'larry', 'curly'], [30, 40, 50]),
_.object([['moe', 30], ['larry', 40], ['curly', 50]])
];
var sortedIndex_res = [
_.sortedIndex([10, 20, 30, 40, 50], 35),
_.sortedIndex(
[
{name: 'moe', age: 40},
{name: 'curly', age: 60}
],
{name: 'larry', age: 50},
'age')
];
var range_res = [
_.range(10),
_.range(1,11),
_.range(0,100,20)
]
console.log(first_res);
console.log(initial_res);
console.log(last_res);
console.log(rest_res);
console.log(compact_res);
console.log(flatten_res);
console.log(without_res);
console.log(union_res);
console.log(difference_res);
console.log(intersection_res);
console.log(unique_res);
console.log(zip_res);
console.log(object_res);
console.log(sortedIndex_res);
console.log(range_res);
集合函数(Collections)
- each
- map
- reduce
- reduceRight
- find
- filter
- where
- findWhere
- reject
- every
- some
- contains
- invoke
- pluck
- max
- min
- sortBy
- groupBy
- indexBy
- countBy
- shuffle
- sample
- toArray
- size
- partition
var arr = [1,2,3,4,2];
var list = [
{a:1,b:2},
{c:3},
{a:1,b:2,c:2},
{a:1,b:2,d:4},
{d:4},
{d:100},
{a:1,d:200},
];
function each(x){
console.log(x);
}
function map(x){
return x*x;
}
function reduce(x,y){
return x + y;
}
function find(x){
return x%2===0;
}
function filter(x){
return x%2===0;
}
function reject(x){
return x%2===0;
}
function every(x){
return x===4;
}
function some(x){
return x===4;
}
function max(x){
return x.d
}
function sortBy(x){
return Math.abs(x);
}
function groupBy(x){
return x>10;
}
function countBy(x){
return x>10?"moreThanTen":"lessThanTen";
}
function partition(x){
return x%3===0;
}
_.each(arr,each);
var map_res = _.map(arr,map);
var reduce_res = _.reduce(arr,reduce);
var find_res = _.find(arr,find);
var filter_res = _.filter(arr,filter);
var where_res = _.where(list,{a:1,b:2});
var findWhere_res = _.findWhere(list,{a:1,b:2});
var reject_res = _.reject(arr,reject);
var every_res = _.every(arr,every);
var some_res = _.some(arr,some);
var contains_res = _.contains({a:444},444);
var invoke_res = _.invoke([[4,3,8,2],[6,5,5,2]],"reverse");
var pluck_res = _.pluck(list,"a");
var max_res = _.max(list,max);
var min_res = _.min([1,2,3,4,5]);
var sortBy_res = _.sortBy([-900,-400,600,100,200,-100,-500],sortBy);
var groupBy_res = _.groupBy([11,12,2,3,4,7,23],groupBy);
var indexBy_res = _.indexBy(
[{name: 'moe', age: 40}, {name: 'larry', age: 50}, {name: 'curly', age: 60}]
,"age");
var countBy_res = _.countBy([1,2,3,4,5,11,22,33,44],countBy);
var shuffle_res = _.shuffle([1, 2, 3, 4, 5, 6]);
var sample_res = _.sample([1, 2, 3, 4, 5, 6],3);
var size_res = _.size(list);
var partition_res = _.partition([3,4,2,3,9,8,9,1,2,6],partition);
console.log(map_res);
console.log(reduce_res);
console.log(find_res);
console.log(filter_res);
console.log(where_res);
console.log(findWhere_res);
console.log(reject_res);
console.log(every_res);
console.log(some_res);
console.log(contains_res);
console.log(pluck_res);
console.log(max_res);
console.log(min_res);
console.log(sortBy_res);
console.log(groupBy_res);
console.log(indexBy_res);
console.log(countBy_res);
console.log(shuffle_res);
console.log(sample_res);
console.log(size_res);
console.log(partition_res);
链式语法(Chaining)
var arr = [1,2,3,4]
function double(x){
return x*x;
}
var res = _.chain(arr).reverse().push(0).map(double)
console.log(res);
参考文档
underscore中文文档