_.allKeys

allKeys_.allKeys(object) Retrieve all the names of object's own and inherited properties. function Stooge(name) { this.name = name; } Stooge.prototype.silly = true; _.allKeys(new Stooge("Moe")); => ["name", "silly"]

_.findLastIndex

findLastIndex_.findLastIndex(array, predicate, [context]) Like _.findIndex but iterates the array in reverse, returning the index closest to the end where the predicate truth test passes. var users = [{'id': 1, 'name': 'Bob', 'last': 'Brown'}, {'id': 2, 'name': 'Ted', 'last': 'White'}, {'id': 3, 'name': 'Frank', 'last': 'James'}, {'id': 4, 'name': 'Ted', 'last': 'Jones'}]; _.findLastIndex(users, { name: 'Ted' }); => 3

_.once

once_.once(function) Creates a version of the function that can only be called one time. Repeated calls to the modified function will have no effect, returning the value from the original call. Useful for initialization functions, instead of having to set a boolean flag and then check it later. var initialize = _.once(createApplication); initialize(); initialize(); // Application is only created once.

_.groupBy

groupBy_.groupBy(list, iteratee, [context]) Splits a collection into sets, grouped by the result of running each value through iteratee. If iteratee is a string instead of a function, groups by the property named by iteratee on each of the values. _.groupBy([1.3, 2.1, 2.4], function(num){ return Math.floor(num); }); => {1: [1.3], 2: [2.1, 2.4]} _.groupBy(['one', 'two', 'three'], 'length'); => {3: ["one", "two"], 5: ["three"]}

_.isEmpty

isEmpty_.isEmpty(object) Returns true if an enumerable object contains no values (no enumerable own-properties). For strings and array-like objects _.isEmpty checks if the length property is 0. _.isEmpty([1, 2, 3]); => false _.isEmpty({}); => true

_.max

max_.max(list, [iteratee], [context]) Returns the maximum value in list. If an iteratee function is provided, it will be used on each value to generate the criterion by which the value is ranked. -Infinity is returned if list is empty, so an isEmpty guard may be required. var stooges = [{name: 'moe', age: 40}, {name: 'larry', age: 50}, {name: 'curly', age: 60}]; _.max(stooges, function(stooge){ return stooge.age; }); => {name: 'curly', age: 60};

_.isArguments

isArguments_.isArguments(object) Returns true if object is an Arguments object. (function(){ return _.isArguments(arguments); })(1, 2, 3); => true _.isArguments([1,2,3]); => false

_.uniqueId

uniqueId_.uniqueId([prefix]) Generate a globally-unique id for client-side models or DOM elements that need one. If prefix is passed, the id will be appended to it. _.uniqueId('contact_'); => 'contact_104'

_.unzip

unzip_.unzip(array) The opposite of zip. Given an array of arrays, returns a series of new arrays, the first of which contains all of the first elements in the input arrays, the second of which contains all of the second elements, and so on. _.unzip([["moe", 30, true], ["larry", 40, false], ["curly", 50, false]]); => [['moe', 'larry', 'curly'], [30, 40, 50], [true, false, false]]

_.reduce

reduce_.reduce(list, iteratee, [memo], [context]) Aliases: inject, foldl Also known as inject and foldl, reduce boils down a list of values into a single value. Memo is the initial state of the reduction, and each successive step of it should be returned by iteratee. The iteratee is passed four arguments: the memo, then the value and index (or key) of the iteration, and finally a reference to the entire list. If no memo is passed to the initial invocation of reduce, the iteratee is not invo