开源项目推荐
Calling chain
will cause all future method calls to return wrapped objects. When you’ve finished the computation, call value
to retrieve the final value. Here’s an example of chaining together a map/flatten/reduce, in order to get the word count of every word in a song.
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 ... }
In addition, the Array prototype’s methods are proxied through the chained Underscore object, so you can slip a reverse
or a push
into your chain, and continue to modify the array.
chain
_.chain(obj)
source
Returns a wrapped object. Calling methods on this object will continue to return wrapped objects until value
is called.
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
_.chain(obj).value()
source
Extracts the value of a wrapped object.
_.chain([1, 2, 3]).reverse().value();
=> [3, 2, 1]