mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-07 18:07:49 +00:00
Update builds, docs, and add a unit test for the _.findWhere alias.
This commit is contained in:
463
dist/lodash.underscore.js
vendored
463
dist/lodash.underscore.js
vendored
@@ -557,6 +557,19 @@
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* The base implementation of `_.random` without argument juggling or support
|
||||
* for ruturning floating-point numbers.
|
||||
*
|
||||
* @private
|
||||
* @param {number} min The minimum possible value.
|
||||
* @param {number} max The maximum possible value.
|
||||
* @returns {number} Returns a random number.
|
||||
*/
|
||||
function baseRandom(min, max) {
|
||||
return min + floor(nativeRandom() * (max - min + 1));
|
||||
}
|
||||
|
||||
/**
|
||||
* The base implementation of `_.uniq` without support for callback shorthands
|
||||
* or `thisArg` binding.
|
||||
@@ -909,16 +922,16 @@
|
||||
* @returns {Object} Returns the destination object.
|
||||
* @example
|
||||
*
|
||||
* _.assign({ 'name': 'moe' }, { 'age': 40 });
|
||||
* // => { 'name': 'moe', 'age': 40 }
|
||||
* _.assign({ 'name': 'fred' }, { 'age': 40 });
|
||||
* // => { 'name': 'fred', 'age': 40 }
|
||||
*
|
||||
* var defaults = _.partialRight(_.assign, function(a, b) {
|
||||
* return typeof a == 'undefined' ? b : a;
|
||||
* });
|
||||
*
|
||||
* var food = { 'name': 'apple' };
|
||||
* defaults(food, { 'name': 'banana', 'type': 'fruit' });
|
||||
* // => { 'name': 'apple', 'type': 'fruit' }
|
||||
* var person = { 'name': 'barney' };
|
||||
* defaults(person, { 'name': 'fred', 'employer': 'slate' });
|
||||
* // => { 'name': 'barney', 'employer': 'slate' }
|
||||
*/
|
||||
function assign(object) {
|
||||
if (!object) {
|
||||
@@ -952,17 +965,17 @@
|
||||
* @returns {*} Returns the cloned value.
|
||||
* @example
|
||||
*
|
||||
* var stooges = [
|
||||
* { 'name': 'moe', 'age': 40 },
|
||||
* { 'name': 'larry', 'age': 50 }
|
||||
* var characters = [
|
||||
* { 'name': 'barney', 'age': 36 },
|
||||
* { 'name': 'fred', 'age': 40 }
|
||||
* ];
|
||||
*
|
||||
* var shallow = _.clone(stooges);
|
||||
* shallow[0] === stooges[0];
|
||||
* var shallow = _.clone(characters);
|
||||
* shallow[0] === characters[0];
|
||||
* // => true
|
||||
*
|
||||
* var deep = _.clone(stooges, true);
|
||||
* deep[0] === stooges[0];
|
||||
* var deep = _.clone(characters, true);
|
||||
* deep[0] === characters[0];
|
||||
* // => false
|
||||
*
|
||||
* _.mixin({
|
||||
@@ -997,9 +1010,9 @@
|
||||
* @returns {Object} Returns the destination object.
|
||||
* @example
|
||||
*
|
||||
* var food = { 'name': 'apple' };
|
||||
* _.defaults(food, { 'name': 'banana', 'type': 'fruit' });
|
||||
* // => { 'name': 'apple', 'type': 'fruit' }
|
||||
* var person = { 'name': 'barney' };
|
||||
* _.defaults(person, { 'name': 'fred', 'employer': 'slate' });
|
||||
* // => { 'name': 'barney', 'employer': 'slate' }
|
||||
*/
|
||||
function defaults(object) {
|
||||
if (!object) {
|
||||
@@ -1144,8 +1157,8 @@
|
||||
* @returns {Object} Returns the created inverted object.
|
||||
* @example
|
||||
*
|
||||
* _.invert({ 'first': 'moe', 'second': 'larry' });
|
||||
* // => { 'moe': 'first', 'larry': 'second' }
|
||||
* _.invert({ 'first': 'fred', 'second': 'barney' });
|
||||
* // => { 'fred': 'first', 'barney': 'second' }
|
||||
*/
|
||||
function invert(object) {
|
||||
var index = -1,
|
||||
@@ -1264,13 +1277,13 @@
|
||||
* @returns {boolean} Returns `true` if the values are equivalent, else `false`.
|
||||
* @example
|
||||
*
|
||||
* var moe = { 'name': 'moe', 'age': 40 };
|
||||
* var copy = { 'name': 'moe', 'age': 40 };
|
||||
* var fred = { 'name': 'fred', 'age': 40 };
|
||||
* var copy = { 'name': 'fred', 'age': 40 };
|
||||
*
|
||||
* moe == copy;
|
||||
* fred == copy;
|
||||
* // => false
|
||||
*
|
||||
* _.isEqual(moe, copy);
|
||||
* _.isEqual(fred, copy);
|
||||
* // => true
|
||||
*
|
||||
* var words = ['hello', 'goodbye'];
|
||||
@@ -1452,7 +1465,7 @@
|
||||
* @returns {boolean} Returns `true` if the `value` is a regular expression, else `false`.
|
||||
* @example
|
||||
*
|
||||
* _.isRegExp(/moe/);
|
||||
* _.isRegExp(/fred/);
|
||||
* // => true
|
||||
*/
|
||||
function isRegExp(value) {
|
||||
@@ -1469,7 +1482,7 @@
|
||||
* @returns {boolean} Returns `true` if the `value` is a string, else `false`.
|
||||
* @example
|
||||
*
|
||||
* _.isString('moe');
|
||||
* _.isString('fred');
|
||||
* // => true
|
||||
*/
|
||||
function isString(value) {
|
||||
@@ -1511,13 +1524,13 @@
|
||||
* @returns {Object} Returns an object without the omitted properties.
|
||||
* @example
|
||||
*
|
||||
* _.omit({ 'name': 'moe', 'age': 40 }, 'age');
|
||||
* // => { 'name': 'moe' }
|
||||
* _.omit({ 'name': 'fred', 'age': 40 }, 'age');
|
||||
* // => { 'name': 'fred' }
|
||||
*
|
||||
* _.omit({ 'name': 'moe', 'age': 40 }, function(value) {
|
||||
* _.omit({ 'name': 'fred', 'age': 40 }, function(value) {
|
||||
* return typeof value == 'number';
|
||||
* });
|
||||
* // => { 'name': 'moe' }
|
||||
* // => { 'name': 'fred' }
|
||||
*/
|
||||
function omit(object) {
|
||||
var indexOf = getIndexOf(),
|
||||
@@ -1543,8 +1556,8 @@
|
||||
* @returns {Array} Returns new array of key-value pairs.
|
||||
* @example
|
||||
*
|
||||
* _.pairs({ 'moe': 30, 'larry': 40 });
|
||||
* // => [['moe', 30], ['larry', 40]] (property order is not guaranteed across environments)
|
||||
* _.pairs({ 'barney': 36, 'fred': 40 });
|
||||
* // => [['barney', 36], ['fred', 40]] (property order is not guaranteed across environments)
|
||||
*/
|
||||
function pairs(object) {
|
||||
var index = -1,
|
||||
@@ -1578,13 +1591,13 @@
|
||||
* @returns {Object} Returns an object composed of the picked properties.
|
||||
* @example
|
||||
*
|
||||
* _.pick({ 'name': 'moe', '_userid': 'moe1' }, 'name');
|
||||
* // => { 'name': 'moe' }
|
||||
* _.pick({ 'name': 'fred', '_userid': 'fred1' }, 'name');
|
||||
* // => { 'name': 'fred' }
|
||||
*
|
||||
* _.pick({ 'name': 'moe', '_userid': 'moe1' }, function(value, key) {
|
||||
* _.pick({ 'name': 'fred', '_userid': 'fred1' }, function(value, key) {
|
||||
* return key.charAt(0) != '_';
|
||||
* });
|
||||
* // => { 'name': 'moe' }
|
||||
* // => { 'name': 'fred' }
|
||||
*/
|
||||
function pick(object) {
|
||||
var index = -1,
|
||||
@@ -1649,10 +1662,10 @@
|
||||
* _.contains([1, 2, 3], 1, 2);
|
||||
* // => false
|
||||
*
|
||||
* _.contains({ 'name': 'moe', 'age': 40 }, 'moe');
|
||||
* _.contains({ 'name': 'fred', 'age': 40 }, 'fred');
|
||||
* // => true
|
||||
*
|
||||
* _.contains('curly', 'ur');
|
||||
* _.contains('pebbles', 'ur');
|
||||
* // => true
|
||||
*/
|
||||
function contains(collection, target) {
|
||||
@@ -1732,20 +1745,20 @@
|
||||
* else `false`.
|
||||
* @example
|
||||
*
|
||||
* _.every([true, 1, null, 'yes'], Boolean);
|
||||
* _.every([true, 1, null, 'yes']);
|
||||
* // => false
|
||||
*
|
||||
* var stooges = [
|
||||
* { 'name': 'moe', 'age': 40 },
|
||||
* { 'name': 'larry', 'age': 50 }
|
||||
* var characters = [
|
||||
* { 'name': 'barney', 'age': 36 },
|
||||
* { 'name': 'fred', 'age': 40 }
|
||||
* ];
|
||||
*
|
||||
* // using "_.pluck" callback shorthand
|
||||
* _.every(stooges, 'age');
|
||||
* _.every(characters, 'age');
|
||||
* // => true
|
||||
*
|
||||
* // using "_.where" callback shorthand
|
||||
* _.every(stooges, { 'age': 50 });
|
||||
* _.every(characters, { 'age': 36 });
|
||||
* // => false
|
||||
*/
|
||||
function every(collection, callback, thisArg) {
|
||||
@@ -1796,18 +1809,18 @@
|
||||
* var evens = _.filter([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });
|
||||
* // => [2, 4, 6]
|
||||
*
|
||||
* var food = [
|
||||
* { 'name': 'apple', 'organic': false, 'type': 'fruit' },
|
||||
* { 'name': 'carrot', 'organic': true, 'type': 'vegetable' }
|
||||
* var characters = [
|
||||
* { 'name': 'barney', 'age': 36, 'blocked': false },
|
||||
* { 'name': 'fred', 'age': 40, 'blocked': true }
|
||||
* ];
|
||||
*
|
||||
* // using "_.pluck" callback shorthand
|
||||
* _.filter(food, 'organic');
|
||||
* // => [{ 'name': 'carrot', 'organic': true, 'type': 'vegetable' }]
|
||||
* _.filter(characters, 'blocked');
|
||||
* // => [{ 'name': 'fred', 'age': 40, 'blocked': true }]
|
||||
*
|
||||
* // using "_.where" callback shorthand
|
||||
* _.filter(food, { 'type': 'fruit' });
|
||||
* // => [{ 'name': 'apple', 'organic': false, 'type': 'fruit' }]
|
||||
* _.filter(characters, { 'age': 36 });
|
||||
* // => [{ 'name': 'barney', 'age': 36, 'blocked': false }]
|
||||
*/
|
||||
function filter(collection, callback, thisArg) {
|
||||
var result = [];
|
||||
@@ -1857,24 +1870,24 @@
|
||||
* @returns {*} Returns the found element, else `undefined`.
|
||||
* @example
|
||||
*
|
||||
* _.find([1, 2, 3, 4], function(num) {
|
||||
* return num % 2 == 0;
|
||||
* });
|
||||
* // => 2
|
||||
*
|
||||
* var food = [
|
||||
* { 'name': 'apple', 'organic': false, 'type': 'fruit' },
|
||||
* { 'name': 'banana', 'organic': true, 'type': 'fruit' },
|
||||
* { 'name': 'beet', 'organic': false, 'type': 'vegetable' }
|
||||
* var characters = [
|
||||
* { 'name': 'barney', 'age': 36, 'blocked': false },
|
||||
* { 'name': 'fred', 'age': 40, 'blocked': true },
|
||||
* { 'name': 'pebbles', 'age': 1, 'blocked': false }
|
||||
* ];
|
||||
*
|
||||
* _.find(characters, function(chr) {
|
||||
* return chr.age < 40;
|
||||
* });
|
||||
* // => { 'name': 'barney', 'age': 36, 'blocked': false }
|
||||
*
|
||||
* // using "_.where" callback shorthand
|
||||
* _.find(food, { 'type': 'vegetable' });
|
||||
* // => { 'name': 'beet', 'organic': false, 'type': 'vegetable' }
|
||||
* _.find(characters, { 'age': 1 });
|
||||
* // => { 'name': 'pebbles', 'age': 1, 'blocked': false }
|
||||
*
|
||||
* // using "_.pluck" callback shorthand
|
||||
* _.find(food, 'organic');
|
||||
* // => { 'name': 'banana', 'organic': true, 'type': 'fruit' }
|
||||
* _.find(characters, 'blocked');
|
||||
* // => { 'name': 'fred', 'age': 40, 'blocked': true }
|
||||
*/
|
||||
function find(collection, callback, thisArg) {
|
||||
callback = createCallback(callback, thisArg, 3);
|
||||
@@ -2076,7 +2089,7 @@
|
||||
* _.indexBy(keys, function(key) { return String.fromCharCode(key.code); });
|
||||
* // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
|
||||
*
|
||||
* _.indexBy(stooges, function(key) { this.fromCharCode(key.code); }, String);
|
||||
* _.indexBy(characters, function(key) { this.fromCharCode(key.code); }, String);
|
||||
* // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
|
||||
*/
|
||||
var indexBy = createAggregator(function(result, value, key) {
|
||||
@@ -2148,14 +2161,14 @@
|
||||
* _.map({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { return num * 3; });
|
||||
* // => [3, 6, 9] (property order is not guaranteed across environments)
|
||||
*
|
||||
* var stooges = [
|
||||
* { 'name': 'moe', 'age': 40 },
|
||||
* { 'name': 'larry', 'age': 50 }
|
||||
* var characters = [
|
||||
* { 'name': 'barney', 'age': 36 },
|
||||
* { 'name': 'fred', 'age': 40 }
|
||||
* ];
|
||||
*
|
||||
* // using "_.pluck" callback shorthand
|
||||
* _.map(stooges, 'name');
|
||||
* // => ['moe', 'larry']
|
||||
* _.map(characters, 'name');
|
||||
* // => ['barney', 'fred']
|
||||
*/
|
||||
function map(collection, callback, thisArg) {
|
||||
var index = -1,
|
||||
@@ -2204,17 +2217,17 @@
|
||||
* _.max([4, 2, 8, 6]);
|
||||
* // => 8
|
||||
*
|
||||
* var stooges = [
|
||||
* { 'name': 'moe', 'age': 40 },
|
||||
* { 'name': 'larry', 'age': 50 }
|
||||
* var characters = [
|
||||
* { 'name': 'barney', 'age': 36 },
|
||||
* { 'name': 'fred', 'age': 40 }
|
||||
* ];
|
||||
*
|
||||
* _.max(stooges, function(stooge) { return stooge.age; });
|
||||
* // => { 'name': 'larry', 'age': 50 };
|
||||
* _.max(characters, function(chr) { return chr.age; });
|
||||
* // => { 'name': 'fred', 'age': 40 };
|
||||
*
|
||||
* // using "_.pluck" callback shorthand
|
||||
* _.max(stooges, 'age');
|
||||
* // => { 'name': 'larry', 'age': 50 };
|
||||
* _.max(characters, 'age');
|
||||
* // => { 'name': 'fred', 'age': 40 };
|
||||
*/
|
||||
function max(collection, callback, thisArg) {
|
||||
var computed = -Infinity,
|
||||
@@ -2272,17 +2285,17 @@
|
||||
* _.min([4, 2, 8, 6]);
|
||||
* // => 2
|
||||
*
|
||||
* var stooges = [
|
||||
* { 'name': 'moe', 'age': 40 },
|
||||
* { 'name': 'larry', 'age': 50 }
|
||||
* var characters = [
|
||||
* { 'name': 'barney', 'age': 36 },
|
||||
* { 'name': 'fred', 'age': 40 }
|
||||
* ];
|
||||
*
|
||||
* _.min(stooges, function(stooge) { return stooge.age; });
|
||||
* // => { 'name': 'moe', 'age': 40 };
|
||||
* _.min(characters, function(chr) { return chr.age; });
|
||||
* // => { 'name': 'barney', 'age': 36 };
|
||||
*
|
||||
* // using "_.pluck" callback shorthand
|
||||
* _.min(stooges, 'age');
|
||||
* // => { 'name': 'moe', 'age': 40 };
|
||||
* _.min(characters, 'age');
|
||||
* // => { 'name': 'barney', 'age': 36 };
|
||||
*/
|
||||
function min(collection, callback, thisArg) {
|
||||
var computed = Infinity,
|
||||
@@ -2313,7 +2326,7 @@
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the value of a specified property from all elements in the `collection`.
|
||||
* Retrieves the value of a specified property from all elements in the collection.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
@@ -2324,13 +2337,13 @@
|
||||
* @returns {Array} Returns a new array of property values.
|
||||
* @example
|
||||
*
|
||||
* var stooges = [
|
||||
* { 'name': 'moe', 'age': 40 },
|
||||
* { 'name': 'larry', 'age': 50 }
|
||||
* var characters = [
|
||||
* { 'name': 'barney', 'age': 36 },
|
||||
* { 'name': 'fred', 'age': 40 }
|
||||
* ];
|
||||
*
|
||||
* _.pluck(stooges, 'name');
|
||||
* // => ['moe', 'larry']
|
||||
* _.pluck(characters, 'name');
|
||||
* // => ['barney', 'fred']
|
||||
*/
|
||||
function pluck(collection, property) {
|
||||
var index = -1,
|
||||
@@ -2455,18 +2468,18 @@
|
||||
* var odds = _.reject([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });
|
||||
* // => [1, 3, 5]
|
||||
*
|
||||
* var food = [
|
||||
* { 'name': 'apple', 'organic': false, 'type': 'fruit' },
|
||||
* { 'name': 'carrot', 'organic': true, 'type': 'vegetable' }
|
||||
* var characters = [
|
||||
* { 'name': 'barney', 'age': 36, 'blocked': false },
|
||||
* { 'name': 'fred', 'age': 40, 'blocked': true }
|
||||
* ];
|
||||
*
|
||||
* // using "_.pluck" callback shorthand
|
||||
* _.reject(food, 'organic');
|
||||
* // => [{ 'name': 'apple', 'organic': false, 'type': 'fruit' }]
|
||||
* _.reject(characters, 'blocked');
|
||||
* // => [{ 'name': 'barney', 'age': 36, 'blocked': false }]
|
||||
*
|
||||
* // using "_.where" callback shorthand
|
||||
* _.reject(food, { 'type': 'fruit' });
|
||||
* // => [{ 'name': 'carrot', 'organic': true, 'type': 'vegetable' }]
|
||||
* _.reject(characters, { 'age': 36 });
|
||||
* // => [{ 'name': 'fred', 'age': 40, 'blocked': true }]
|
||||
*/
|
||||
function reject(collection, callback, thisArg) {
|
||||
callback = createCallback(callback, thisArg, 3);
|
||||
@@ -2495,12 +2508,11 @@
|
||||
* // => [3, 1]
|
||||
*/
|
||||
function sample(collection, n, guard) {
|
||||
var length = collection ? collection.length : 0;
|
||||
if (typeof length != 'number') {
|
||||
if (collection && typeof collection.length != 'number') {
|
||||
collection = values(collection);
|
||||
}
|
||||
if (n == null || guard) {
|
||||
return collection ? collection[random(length - 1)] : undefined;
|
||||
return collection ? collection[baseRandom(0, collection.length - 1)] : undefined;
|
||||
}
|
||||
var result = shuffle(collection);
|
||||
result.length = nativeMin(nativeMax(0, n), result.length);
|
||||
@@ -2527,7 +2539,7 @@
|
||||
result = Array(typeof length == 'number' ? length : 0);
|
||||
|
||||
forEach(collection, function(value) {
|
||||
var rand = random(++index);
|
||||
var rand = baseRandom(0, ++index);
|
||||
result[index] = result[rand];
|
||||
result[rand] = value;
|
||||
});
|
||||
@@ -2551,7 +2563,7 @@
|
||||
* _.size({ 'one': 1, 'two': 2, 'three': 3 });
|
||||
* // => 3
|
||||
*
|
||||
* _.size('curly');
|
||||
* _.size('pebbles');
|
||||
* // => 5
|
||||
*/
|
||||
function size(collection) {
|
||||
@@ -2588,17 +2600,17 @@
|
||||
* _.some([null, 0, 'yes', false], Boolean);
|
||||
* // => true
|
||||
*
|
||||
* var food = [
|
||||
* { 'name': 'apple', 'organic': false, 'type': 'fruit' },
|
||||
* { 'name': 'carrot', 'organic': true, 'type': 'vegetable' }
|
||||
* var characters = [
|
||||
* { 'name': 'barney', 'age': 36, 'blocked': false },
|
||||
* { 'name': 'fred', 'age': 40, 'blocked': true }
|
||||
* ];
|
||||
*
|
||||
* // using "_.pluck" callback shorthand
|
||||
* _.some(food, 'organic');
|
||||
* _.some(characters, 'blocked');
|
||||
* // => true
|
||||
*
|
||||
* // using "_.where" callback shorthand
|
||||
* _.some(food, { 'type': 'meat' });
|
||||
* _.some(characters, { 'age': 1 });
|
||||
* // => false
|
||||
*/
|
||||
function some(collection, callback, thisArg) {
|
||||
@@ -2716,16 +2728,16 @@
|
||||
* @returns {Array} Returns a new array of elements that have the given properties.
|
||||
* @example
|
||||
*
|
||||
* var stooges = [
|
||||
* { 'name': 'curly', 'age': 30, 'quotes': ['Oh, a wise guy, eh?', 'Poifect!'] },
|
||||
* { 'name': 'moe', 'age': 40, 'quotes': ['Spread out!', 'You knucklehead!'] }
|
||||
* var characters = [
|
||||
* { 'name': 'barney', 'age': 36, 'pets': ['hoppy'] },
|
||||
* { 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] }
|
||||
* ];
|
||||
*
|
||||
* _.where(stooges, { 'age': 40 });
|
||||
* // => [{ 'name': 'moe', 'age': 40, 'quotes': ['Spread out!', 'You knucklehead!'] }]
|
||||
* _.where(characters, { 'age': 36 });
|
||||
* // => [{ 'name': 'barney', 'age': 36, 'pets': ['hoppy'] }]
|
||||
*
|
||||
* _.where(stooges, { 'quotes': ['Poifect!'] });
|
||||
* // => [{ 'name': 'curly', 'age': 30, 'quotes': ['Oh, a wise guy, eh?', 'Poifect!'] }]
|
||||
* _.where(characters, { 'pets': ['dino'] });
|
||||
* // => [{ 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] }]
|
||||
*/
|
||||
function where(collection, properties, first) {
|
||||
return (first && isEmpty(properties))
|
||||
@@ -2831,24 +2843,19 @@
|
||||
* });
|
||||
* // => [1, 2]
|
||||
*
|
||||
* var food = [
|
||||
* { 'name': 'banana', 'organic': true },
|
||||
* { 'name': 'beet', 'organic': false },
|
||||
* var characters = [
|
||||
* { 'name': 'barney', 'blocked': true, 'employer': 'slate' },
|
||||
* { 'name': 'fred', 'blocked': false, 'employer': 'slate' },
|
||||
* { 'name': 'pebbles', 'blocked': true, 'employer': 'na' }
|
||||
* ];
|
||||
*
|
||||
* // using "_.pluck" callback shorthand
|
||||
* _.first(food, 'organic');
|
||||
* // => [{ 'name': 'banana', 'organic': true }]
|
||||
*
|
||||
* var food = [
|
||||
* { 'name': 'apple', 'type': 'fruit' },
|
||||
* { 'name': 'banana', 'type': 'fruit' },
|
||||
* { 'name': 'beet', 'type': 'vegetable' }
|
||||
* ];
|
||||
* _.first(characters, 'blocked');
|
||||
* // => [{ 'name': 'barney', 'blocked': true, 'employer': 'slate' }]
|
||||
*
|
||||
* // using "_.where" callback shorthand
|
||||
* _.first(food, { 'type': 'fruit' });
|
||||
* // => [{ 'name': 'apple', 'type': 'fruit' }, { 'name': 'banana', 'type': 'fruit' }]
|
||||
* _.pluck(_.first(characters, { 'employer': 'slate' }), 'name');
|
||||
* // => ['barney', 'fred']
|
||||
*/
|
||||
function first(array, callback, thisArg) {
|
||||
var n = 0,
|
||||
@@ -2901,14 +2908,14 @@
|
||||
* _.flatten([1, [2], [3, [[4]]]], true);
|
||||
* // => [1, 2, 3, [[4]]];
|
||||
*
|
||||
* var stooges = [
|
||||
* { 'name': 'curly', 'quotes': ['Oh, a wise guy, eh?', 'Poifect!'] },
|
||||
* { 'name': 'moe', 'quotes': ['Spread out!', 'You knucklehead!'] }
|
||||
* var characters = [
|
||||
* { 'name': 'barney', 'age': 30, 'pets': ['hoppy'] },
|
||||
* { 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] }
|
||||
* ];
|
||||
*
|
||||
* // using "_.pluck" callback shorthand
|
||||
* _.flatten(stooges, 'quotes');
|
||||
* // => ['Oh, a wise guy, eh?', 'Poifect!', 'Spread out!', 'You knucklehead!']
|
||||
* _.flatten(characters, 'pets');
|
||||
* // => ['hoppy', 'baby puss', 'dino']
|
||||
*/
|
||||
function flatten(array, isShallow) {
|
||||
return baseFlatten(array, isShallow);
|
||||
@@ -2985,24 +2992,19 @@
|
||||
* });
|
||||
* // => [1]
|
||||
*
|
||||
* var food = [
|
||||
* { 'name': 'beet', 'organic': false },
|
||||
* { 'name': 'carrot', 'organic': true }
|
||||
* var characters = [
|
||||
* { 'name': 'barney', 'blocked': false, 'employer': 'slate' },
|
||||
* { 'name': 'fred', 'blocked': true, 'employer': 'slate' },
|
||||
* { 'name': 'pebbles', 'blocked': true, 'employer': 'na' }
|
||||
* ];
|
||||
*
|
||||
* // using "_.pluck" callback shorthand
|
||||
* _.initial(food, 'organic');
|
||||
* // => [{ 'name': 'beet', 'organic': false }]
|
||||
*
|
||||
* var food = [
|
||||
* { 'name': 'banana', 'type': 'fruit' },
|
||||
* { 'name': 'beet', 'type': 'vegetable' },
|
||||
* { 'name': 'carrot', 'type': 'vegetable' }
|
||||
* ];
|
||||
* _.initial(characters, 'blocked');
|
||||
* // => [{ 'name': 'barney', 'blocked': false, 'employer': 'slate' }]
|
||||
*
|
||||
* // using "_.where" callback shorthand
|
||||
* _.initial(food, { 'type': 'vegetable' });
|
||||
* // => [{ 'name': 'banana', 'type': 'fruit' }]
|
||||
* _.pluck(_.initial(characters, { 'employer': 'na' }), 'name');
|
||||
* // => ['barney', 'fred']
|
||||
*/
|
||||
function initial(array, callback, thisArg) {
|
||||
var n = 0,
|
||||
@@ -3094,24 +3096,19 @@
|
||||
* });
|
||||
* // => [2, 3]
|
||||
*
|
||||
* var food = [
|
||||
* { 'name': 'beet', 'organic': false },
|
||||
* { 'name': 'carrot', 'organic': true }
|
||||
* var characters = [
|
||||
* { 'name': 'barney', 'blocked': false, 'employer': 'slate' },
|
||||
* { 'name': 'fred', 'blocked': true, 'employer': 'slate' },
|
||||
* { 'name': 'pebbles', 'blocked': true, 'employer': 'na' }
|
||||
* ];
|
||||
*
|
||||
* // using "_.pluck" callback shorthand
|
||||
* _.last(food, 'organic');
|
||||
* // => [{ 'name': 'carrot', 'organic': true }]
|
||||
*
|
||||
* var food = [
|
||||
* { 'name': 'banana', 'type': 'fruit' },
|
||||
* { 'name': 'beet', 'type': 'vegetable' },
|
||||
* { 'name': 'carrot', 'type': 'vegetable' }
|
||||
* ];
|
||||
* _.pluck(_.last(characters, 'blocked'), 'name');
|
||||
* // => ['fred', 'pebbles']
|
||||
*
|
||||
* // using "_.where" callback shorthand
|
||||
* _.last(food, { 'type': 'vegetable' });
|
||||
* // => [{ 'name': 'beet', 'type': 'vegetable' }, { 'name': 'carrot', 'type': 'vegetable' }]
|
||||
* _.last(characters, { 'employer': 'na' });
|
||||
* // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }]
|
||||
*/
|
||||
function last(array, callback, thisArg) {
|
||||
var n = 0,
|
||||
@@ -3137,6 +3134,13 @@
|
||||
* equality for comparisons, i.e. `===`. If `fromIndex` is negative, it is used
|
||||
* as the offset from the end of the collection.
|
||||
*
|
||||
* If a property name is provided for `callback` the created "_.pluck" style
|
||||
* callback will return the property value of the given element.
|
||||
*
|
||||
* If an object is provided for `callback` the created "_.where" style callback
|
||||
* will return `true` for elements that have the properties of the given object,
|
||||
* else `false`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Arrays
|
||||
@@ -3179,17 +3183,17 @@
|
||||
* @returns {Array} Returns a new range array.
|
||||
* @example
|
||||
*
|
||||
* _.range(10);
|
||||
* // => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
|
||||
* _.range(4);
|
||||
* // => [0, 1, 2, 3]
|
||||
*
|
||||
* _.range(1, 11);
|
||||
* // => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
||||
* _.range(1, 5);
|
||||
* // => [1, 2, 3, 4]
|
||||
*
|
||||
* _.range(0, 30, 5);
|
||||
* // => [0, 5, 10, 15, 20, 25]
|
||||
* _.range(0, 20, 5);
|
||||
* // => [0, 5, 10, 15]
|
||||
*
|
||||
* _.range(0, -10, -1);
|
||||
* // => [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
|
||||
* _.range(0, -4, -1);
|
||||
* // => [0, -1, -2, -3]
|
||||
*
|
||||
* _.range(1, 4, 0);
|
||||
* // => [1, 1, 1]
|
||||
@@ -3256,24 +3260,19 @@
|
||||
* });
|
||||
* // => [3]
|
||||
*
|
||||
* var food = [
|
||||
* { 'name': 'banana', 'organic': true },
|
||||
* { 'name': 'beet', 'organic': false },
|
||||
* var characters = [
|
||||
* { 'name': 'barney', 'blocked': true, 'employer': 'slate' },
|
||||
* { 'name': 'fred', 'blocked': false, 'employer': 'slate' },
|
||||
* { 'name': 'pebbles', 'blocked': true, 'employer': 'na' }
|
||||
* ];
|
||||
*
|
||||
* // using "_.pluck" callback shorthand
|
||||
* _.rest(food, 'organic');
|
||||
* // => [{ 'name': 'beet', 'organic': false }]
|
||||
*
|
||||
* var food = [
|
||||
* { 'name': 'apple', 'type': 'fruit' },
|
||||
* { 'name': 'banana', 'type': 'fruit' },
|
||||
* { 'name': 'beet', 'type': 'vegetable' }
|
||||
* ];
|
||||
* _.pluck(_.rest(characters, 'blocked'), 'name');
|
||||
* // => ['fred', 'pebbles']
|
||||
*
|
||||
* // using "_.where" callback shorthand
|
||||
* _.rest(food, { 'type': 'fruit' });
|
||||
* // => [{ 'name': 'beet', 'type': 'vegetable' }]
|
||||
* _.rest(characters, { 'employer': 'slate' });
|
||||
* // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }]
|
||||
*/
|
||||
function rest(array, callback, thisArg) {
|
||||
if (typeof callback != 'number' && callback != null) {
|
||||
@@ -3463,8 +3462,8 @@
|
||||
* @returns {Array} Returns a new array of grouped elements.
|
||||
* @example
|
||||
*
|
||||
* _.zip(['moe', 'larry'], [30, 40], [true, false]);
|
||||
* // => [['moe', 30, true], ['larry', 40, false]]
|
||||
* _.zip(['fred', 'barney'], [30, 40], [true, false]);
|
||||
* // => [['fred', 30, true], ['barney', 40, false]]
|
||||
*/
|
||||
function zip() {
|
||||
var index = -1,
|
||||
@@ -3492,8 +3491,8 @@
|
||||
* corresponding values.
|
||||
* @example
|
||||
*
|
||||
* _.zipObject(['moe', 'larry'], [30, 40]);
|
||||
* // => { 'moe': 30, 'larry': 40 }
|
||||
* _.zipObject(['fred', 'barney'], [30, 40]);
|
||||
* // => { 'fred': 30, 'barney': 40 }
|
||||
*/
|
||||
function zipObject(keys, values) {
|
||||
var index = -1,
|
||||
@@ -3566,9 +3565,9 @@
|
||||
* return greeting + ' ' + this.name;
|
||||
* };
|
||||
*
|
||||
* func = _.bind(func, { 'name': 'moe' }, 'hi');
|
||||
* func = _.bind(func, { 'name': 'fred' }, 'hi');
|
||||
* func();
|
||||
* // => 'hi moe'
|
||||
* // => 'hi fred'
|
||||
*/
|
||||
function bind(func, thisArg) {
|
||||
return arguments.length > 2
|
||||
@@ -3626,7 +3625,7 @@
|
||||
* @example
|
||||
*
|
||||
* var realNameMap = {
|
||||
* 'curly': 'jerome'
|
||||
* 'pebbles': 'jerome'
|
||||
* };
|
||||
*
|
||||
* var format = function(name) {
|
||||
@@ -3639,7 +3638,7 @@
|
||||
* };
|
||||
*
|
||||
* var welcome = _.compose(greet, format);
|
||||
* welcome('curly');
|
||||
* welcome('pebbles');
|
||||
* // => 'Hiya Jerome!'
|
||||
*/
|
||||
function compose() {
|
||||
@@ -3677,9 +3676,9 @@
|
||||
* @returns {Function} Returns a callback function.
|
||||
* @example
|
||||
*
|
||||
* var stooges = [
|
||||
* { 'name': 'moe', 'age': 40 },
|
||||
* { 'name': 'larry', 'age': 50 }
|
||||
* var characters = [
|
||||
* { 'name': 'barney', 'age': 36 },
|
||||
* { 'name': 'fred', 'age': 40 }
|
||||
* ];
|
||||
*
|
||||
* // wrap to create custom callback shorthands
|
||||
@@ -3690,8 +3689,8 @@
|
||||
* };
|
||||
* });
|
||||
*
|
||||
* _.filter(stooges, 'age__gt45');
|
||||
* // => [{ 'name': 'larry', 'age': 50 }]
|
||||
* _.filter(characters, 'age__gt38');
|
||||
* // => [{ 'name': 'fred', 'age': 40 }]
|
||||
*/
|
||||
function createCallback(func, thisArg, argCount) {
|
||||
var type = typeof func;
|
||||
@@ -3912,17 +3911,17 @@
|
||||
* });
|
||||
*
|
||||
* var data = {
|
||||
* 'moe': { 'name': 'moe', 'age': 40 },
|
||||
* 'curly': { 'name': 'curly', 'age': 60 }
|
||||
* 'fred': { 'name': 'fred', 'age': 40 },
|
||||
* 'pebbles': { 'name': 'pebbles', 'age': 60 }
|
||||
* };
|
||||
*
|
||||
* // modifying the result cache
|
||||
* var stooge = _.memoize(function(name) { return data[name]; }, _.identity);
|
||||
* stooge('curly');
|
||||
* // => { 'name': 'curly', 'age': 60 }
|
||||
* stooge('pebbles');
|
||||
* // => { 'name': 'pebbles', 'age': 60 }
|
||||
*
|
||||
* stooge.cache.curly.name = 'jerome';
|
||||
* stooge('curly');
|
||||
* stooge.cache.pebbles.name = 'jerome';
|
||||
* stooge('pebbles');
|
||||
* // => { 'name': 'jerome', 'age': 60 }
|
||||
*/
|
||||
function memoize(func, resolver) {
|
||||
@@ -3987,8 +3986,8 @@
|
||||
*
|
||||
* var greet = function(greeting, name) { return greeting + ' ' + name; };
|
||||
* var hi = _.partial(greet, 'hi');
|
||||
* hi('moe');
|
||||
* // => 'hi moe'
|
||||
* hi('fred');
|
||||
* // => 'hi fred'
|
||||
*/
|
||||
function partial(func) {
|
||||
return createBound(func, 16, nativeSlice.call(arguments, 1));
|
||||
@@ -4062,10 +4061,10 @@
|
||||
*
|
||||
* var hello = function(name) { return 'hello ' + name; };
|
||||
* hello = _.wrap(hello, function(func) {
|
||||
* return 'before, ' + func('moe') + ', after';
|
||||
* return 'before, ' + func('fred') + ', after';
|
||||
* });
|
||||
* hello();
|
||||
* // => 'before, hello moe, after'
|
||||
* // => 'before, hello fred, after'
|
||||
*/
|
||||
function wrap(value, wrapper) {
|
||||
if (!isFunction(wrapper)) {
|
||||
@@ -4091,8 +4090,8 @@
|
||||
* @returns {string} Returns the escaped string.
|
||||
* @example
|
||||
*
|
||||
* _.escape('Moe, Larry & Curly');
|
||||
* // => 'Moe, Larry & Curly'
|
||||
* _.escape('Fred, Wilma, & Pebbles');
|
||||
* // => 'Fred, Wilma, & Pebbles'
|
||||
*/
|
||||
function escape(string) {
|
||||
return string == null ? '' : String(string).replace(reUnescapedHtml, escapeHtmlChar);
|
||||
@@ -4108,8 +4107,8 @@
|
||||
* @returns {*} Returns `value`.
|
||||
* @example
|
||||
*
|
||||
* var moe = { 'name': 'moe' };
|
||||
* moe === _.identity(moe);
|
||||
* var fred = { 'name': 'fred' };
|
||||
* fred === _.identity(fred);
|
||||
* // => true
|
||||
*/
|
||||
function identity(value) {
|
||||
@@ -4133,11 +4132,11 @@
|
||||
* }
|
||||
* });
|
||||
*
|
||||
* _.capitalize('moe');
|
||||
* // => 'Moe'
|
||||
* _.capitalize('fred');
|
||||
* // => 'Fred'
|
||||
*
|
||||
* _('moe').capitalize();
|
||||
* // => 'Moe'
|
||||
* _('fred').capitalize();
|
||||
* // => 'Fred'
|
||||
*/
|
||||
function mixin(object) {
|
||||
forEach(functions(object), function(methodName) {
|
||||
@@ -4278,8 +4277,8 @@
|
||||
*
|
||||
* // using the "interpolate" delimiter to create a compiled template
|
||||
* var compiled = _.template('hello <%= name %>');
|
||||
* compiled({ 'name': 'moe' });
|
||||
* // => 'hello moe'
|
||||
* compiled({ 'name': 'fred' });
|
||||
* // => 'hello fred'
|
||||
*
|
||||
* // using the "escape" delimiter to escape HTML in data property values
|
||||
* _.template('<b><%- value %></b>', { 'value': '<script>' });
|
||||
@@ -4287,16 +4286,16 @@
|
||||
*
|
||||
* // using the "evaluate" delimiter to generate HTML
|
||||
* var list = '<% _.forEach(people, function(name) { %><li><%- name %></li><% }); %>';
|
||||
* _.template(list, { 'people': ['moe', 'larry'] });
|
||||
* // => '<li>moe</li><li>larry</li>'
|
||||
* _.template(list, { 'people': ['fred', 'barney'] });
|
||||
* // => '<li>fred</li><li>barney</li>'
|
||||
*
|
||||
* // using the ES6 delimiter as an alternative to the default "interpolate" delimiter
|
||||
* _.template('hello ${ name }', { 'name': 'curly' });
|
||||
* // => 'hello curly'
|
||||
* _.template('hello ${ name }', { 'name': 'pebbles' });
|
||||
* // => 'hello pebbles'
|
||||
*
|
||||
* // using the internal `print` function in "evaluate" delimiters
|
||||
* _.template('<% print("hello " + name); %>!', { 'name': 'larry' });
|
||||
* // => 'hello larry!'
|
||||
* _.template('<% print("hello " + name); %>!', { 'name': 'barney' });
|
||||
* // => 'hello barney!'
|
||||
*
|
||||
* // using a custom template delimiters
|
||||
* _.templateSettings = {
|
||||
@@ -4308,8 +4307,8 @@
|
||||
*
|
||||
* // using the `imports` option to import jQuery
|
||||
* var list = '<% $.each(people, function(name) { %><li><%- name %></li><% }); %>';
|
||||
* _.template(list, { 'people': ['moe', 'larry'] }, { 'imports': { '$': jQuery } });
|
||||
* // => '<li>moe</li><li>larry</li>'
|
||||
* _.template(list, { 'people': ['fred', 'barney'] }, { 'imports': { '$': jQuery } });
|
||||
* // => '<li>fred</li><li>barney</li>'
|
||||
*
|
||||
* // using the `sourceURL` option to specify a custom sourceURL for the template
|
||||
* var compiled = _.template('hello <%= name %>', null, { 'sourceURL': '/basic/greeting.jst' });
|
||||
@@ -4436,8 +4435,8 @@
|
||||
* @returns {string} Returns the unescaped string.
|
||||
* @example
|
||||
*
|
||||
* _.unescape('Moe, Larry & Curly');
|
||||
* // => 'Moe, Larry & Curly'
|
||||
* _.unescape('Fred, Barney & Pebbles');
|
||||
* // => 'Fred, Barney & Pebbles'
|
||||
*/
|
||||
function unescape(string) {
|
||||
return string == null ? '' : String(string).replace(reEscapedHtml, unescapeHtmlChar);
|
||||
@@ -4477,18 +4476,18 @@
|
||||
* @returns {Object} Returns the wrapper object.
|
||||
* @example
|
||||
*
|
||||
* var stooges = [
|
||||
* { 'name': 'moe', 'age': 40 },
|
||||
* { 'name': 'larry', 'age': 50 },
|
||||
* { 'name': 'curly', 'age': 60 }
|
||||
* var characters = [
|
||||
* { 'name': 'barney', 'age': 36 },
|
||||
* { 'name': 'fred', 'age': 40 },
|
||||
* { 'name': 'pebbles', 'age': 1 }
|
||||
* ];
|
||||
*
|
||||
* var youngest = _.chain(stooges)
|
||||
* var youngest = _.chain(characters)
|
||||
* .sortBy('age')
|
||||
* .map(function(stooge) { return stooge.name + ' is ' + stooge.age; })
|
||||
* .first()
|
||||
* .value();
|
||||
* // => 'moe is 40'
|
||||
* // => 'pebbles is 1'
|
||||
*/
|
||||
function chain(value) {
|
||||
value = new lodashWrapper(value);
|
||||
@@ -4532,21 +4531,21 @@
|
||||
* @returns {*} Returns the wrapper object.
|
||||
* @example
|
||||
*
|
||||
* var stooges = [
|
||||
* { 'name': 'moe', 'age': 40 },
|
||||
* { 'name': 'larry', 'age': 50 }
|
||||
* var characters = [
|
||||
* { 'name': 'barney', 'age': 36 },
|
||||
* { 'name': 'fred', 'age': 40 }
|
||||
* ];
|
||||
*
|
||||
* // without explicit chaining
|
||||
* _(stooges).first();
|
||||
* // => { 'name': 'moe', 'age': 40 }
|
||||
* _(characters).first();
|
||||
* // => { 'name': 'barney', 'age': 36 }
|
||||
*
|
||||
* // with explicit chaining
|
||||
* _(stooges).chain()
|
||||
* _(characters).chain()
|
||||
* .first()
|
||||
* .pick('age')
|
||||
* .value()
|
||||
* // => { 'age': 40 }
|
||||
* // => { 'age': 36 }
|
||||
*/
|
||||
function wrapperChain() {
|
||||
this.__chain__ = true;
|
||||
|
||||
Reference in New Issue
Block a user