前言:
underscore 是一个JavaScript实用库,提供了类似Prototype.js (或 Ruby)的一些功能,但是没有扩展任何JavaScript内置对象。它提高了代码的可读性,让我们的逻辑更简单.
正文:
1._.find(list, iterator, [context])
功能:遍历list,返回第一个通过iterator迭代器真值检测的元素值,如果没有值传递给测试迭代器将返回undefined。 如果找到匹配的元素,函数将立即返回,不会遍历整个list。
var this_activity = _.find(JSON.parse(localStorage.getItem( "activities")),function(activity) {return activity.status = "start";
}); //如果activities中存在status为start则返回第一个符合条件的,如果没有则返回undefined
2._.filter(list, iterator, [context])
功能:遍历list中的每个值,返回包含所有通过iterator真值检测的元素值。如果存在原生filter方法,则用原生的filter方法。与select用法相近
var apply_lists = _.filter(JSON.parse(localStorage.getItem( "received_messages")),function(received_message) {var enter_into_it = localStorage.enter_into_it;
return received_message.activity_name == enter_into_it;
});
3._.where(list, properties)
功能:遍历list中的每一个值,返回一个数组,这个数组包含包含properties所列出的属性的所有的键 - 值对。
_.where(listOfPlays, {author: "Shakespeare", year: 1611});
=> [{title: "Cymbeline", author: "Shakespeare", year: 1611},
{title: "The Tempest", author: "Shakespeare", year: 1611}]
4._.findWhere(list, properties)
功能:遍历list中的每一个值,返回匹配properties所列出的属性的所有的键 - 值对的第一个值。如果没有找到匹配的属性,或者list是空的,那么将返回undefined。
_.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."}
5._.reject(list, iterator, [context])
返回list中没有通过iterator真值检测的元素集合,与filter相反。
var odds = _.reject([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });
=> [1, 3, 5]
6._.every(list, [iterator], [context])
如果list中的所有元素都通过iterator的真值检测就返回true。如果存在原生的every方法,就使用原生的every。
_.every([true, 1, null, 'yes'], _.identity);
=> false
7._.some(list, [iterator], [context])
如果list中有任何一个元素通过 iterator 的真值检测就返回true。一旦找到了符合条件的元素, 就直接中断对list的遍历. 如果存在原生的some方法,就使用原生的some
_.some([null, 0, 'yes', false]);
=> true
8._.contains(list, value)
如果list包含指定的value则返回true。如果list 是数组,内部使用indexOf判断。
_.contains([1, 2, 3], 3);
=> true
9._.groupBy(list, iterator, [context])
把一个集合分组为多个集合,通过 iterator 返回的结果进行分组. 如果 iterator 是一个字符串而不是函数, 那么将使用 iterator 作为各元素的属性名来对比进行分组.
_.groupBy(those_messages,function(this_message){
return parseInt(this_message.price)
})
10._.map(list, iterator, [context]) Alias: collect
通过变换函数(iterator迭代器)把list中的每个值映射到一个新的数组中(愚人码头注:产生一个新的数组)。如果存在原生的map方法,就用原生map方法来代替。如果list是个JavaScript对象,iterator的参数是(value, key, list)。
_.map(grouped_those_messages,function(value,key){
return {"price":key,"count":value.length}
})
11._.sortBy(list, iterator, [context])
返回一个排序后的list拷贝副本。如果有iterator参数,iterator将作为list排序的依据。迭代器也可以是字符串的属性的名称进行排序的(比如 length)。
_.sortBy(those_messages,function(this_message){
return parseInt(this_message.price)
});
12.each_.each(list, iterator, [context])
遍历list中的所有元素,按顺序用遍历输出每个元素。如果传递了context参数,则把iterator绑定到context对象上。每次调用iterator都会传递三个参数:(element, index, list)。如果list是个JavaScript对象,iterator的参数是 (value, key, list))。如果存在原生的forEach方法,Underscore就使用它代替。
_.each([1, 2, 3], alert);//依次提示每个数字
_.each({one: 1, two: 2, three: 3}, alert);//依次提示每个值
应该注意的是:each与map相似,但是没有返回值,所以用它alert是可以的,但是涉及到返回值就不可以使用了
13.size_.size(list) 返回list的长度。
_.size(activities);//其中activities是一个数组,返回值是该数组的长度
14.chain_.chain(obj) 返回一个封装的对象. 在封装的对象上调用方法会返回封装的对象本身, 直道 value 方法调用为止.
_.chain(BidMessages.get_bid_messages())
.filter(function(bid_message){
return bid_message.activity_name == localStorage.enter_into_it && bid_message.bid_id == localStorage.enter_into_bid
})
.groupBy(function(bid_message){
return parseInt(bid_message.price)
})
.map(function(value,key){
return {"price":key,"count":value.length}
})
.value();//获取封装对象的最终值.
参考文献:
1.官方文档:
http://underscorejs.org/
2.中文文档:
http://www.css88.com/doc/underscore/