1.5.2版本
以下两种风格实现的效果相同
_.map([1, 2, 3], function(n){ return n * 2; });
_([1, 2, 3]).map(function(n){ return n * 2; });
对一个对象使用
chain
方法, 会把这个对象封装并 让以后每次方法的调用结束后都返回这个封装的对象, 当您完成了计算, 可以使用
value
函数来取得最终的值. 以下是一个同时使用了
map/flatten/reduce
的链式语法例子, 目的是计算一首歌的歌词里每一个单词出现的次数.
var lyrics = [
{line: 1, words: "I'm a lumberjack and I'm okay"},
{line: 2, words: "I sleep all night and I work all day"},
{line: 3, words: "He's a lumberjack and he's okay"},
{line: 4, words: "He sleeps all night and he works all day"}
];
_.chain(lyrics)
.map(function(line) { return line.words.split(' '); })
.flatten()
.reduce(function(counts, word) {
counts[word] = (counts[word] || 0) + 1;
return counts;
}, {})
.value();
=> {lumberjack: 2, all: 4, night: 2 ... }
此外,
数组原型方法
也通过代理加入到了链式封装的Underscore对象, 所以您可以 在链式语法中直接使用
reverse
或
push
方法, 然后再接着其他的语句.
chain(返回一个封装的对象)
_.chain(obj)
返回一个封装的对象. 在封装的对象上调用方法会返回封装的对象本身, 直到 value 方法调用为止.
var stooges = [{name: 'curly', age: 25}, {name: 'moe', age: 21}, {name: 'larry', age: 23}];
var youngest = _.chain(stooges)
.sortBy(function(stooge){ return stooge.age; })
.map(function(stooge){ return stooge.name + ' is ' + stooge.age; })
.first()
.value();
=> "moe is 21"
value(获取封装对象的最终值)
_.(obj).value
_([1, 2, 3]).value();
=> [1, 2, 3]