mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-05 01:17:50 +00:00
Bump to v3.0.0.
This commit is contained in:
35
object/assign.js
Normal file
35
object/assign.js
Normal file
@@ -0,0 +1,35 @@
|
||||
import baseAssign from '../internal/baseAssign';
|
||||
import createAssigner from '../internal/createAssigner';
|
||||
|
||||
/**
|
||||
* Assigns own enumerable properties of source object(s) to the destination
|
||||
* object. Subsequent sources overwrite property assignments of previous sources.
|
||||
* If `customizer` is provided it is invoked to produce the assigned values.
|
||||
* The `customizer` is bound to `thisArg` and invoked with five arguments;
|
||||
* (objectValue, sourceValue, key, object, source).
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @alias extend
|
||||
* @category Object
|
||||
* @param {Object} object The destination object.
|
||||
* @param {...Object} [sources] The source objects.
|
||||
* @param {Function} [customizer] The function to customize assigning values.
|
||||
* @param {*} [thisArg] The `this` binding of `customizer`.
|
||||
* @returns {Object} Returns `object`.
|
||||
* @example
|
||||
*
|
||||
* _.assign({ 'user': 'barney' }, { 'age': 40 }, { 'user': 'fred' });
|
||||
* // => { 'user': 'fred', 'age': 40 }
|
||||
*
|
||||
* // using a customizer callback
|
||||
* var defaults = _.partialRight(_.assign, function(value, other) {
|
||||
* return typeof value == 'undefined' ? other : value;
|
||||
* });
|
||||
*
|
||||
* defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });
|
||||
* // => { 'user': 'barney', 'age': 36 }
|
||||
*/
|
||||
var assign = createAssigner(baseAssign);
|
||||
|
||||
export default assign;
|
||||
46
object/create.js
Normal file
46
object/create.js
Normal file
@@ -0,0 +1,46 @@
|
||||
import baseCopy from '../internal/baseCopy';
|
||||
import baseCreate from '../internal/baseCreate';
|
||||
import isIterateeCall from '../internal/isIterateeCall';
|
||||
import keys from './keys';
|
||||
|
||||
/**
|
||||
* Creates an object that inherits from the given `prototype` object. If a
|
||||
* `properties` object is provided its own enumerable properties are assigned
|
||||
* to the created object.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Object
|
||||
* @param {Object} prototype The object to inherit from.
|
||||
* @param {Object} [properties] The properties to assign to the object.
|
||||
* @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
|
||||
* @returns {Object} Returns the new object.
|
||||
* @example
|
||||
*
|
||||
* function Shape() {
|
||||
* this.x = 0;
|
||||
* this.y = 0;
|
||||
* }
|
||||
*
|
||||
* function Circle() {
|
||||
* Shape.call(this);
|
||||
* }
|
||||
*
|
||||
* Circle.prototype = _.create(Shape.prototype, { 'constructor': Circle });
|
||||
*
|
||||
* var circle = new Circle;
|
||||
* circle instanceof Circle;
|
||||
* // => true
|
||||
*
|
||||
* circle instanceof Shape;
|
||||
* // => true
|
||||
*/
|
||||
function create(prototype, properties, guard) {
|
||||
var result = baseCreate(prototype);
|
||||
if (guard && isIterateeCall(prototype, properties, guard)) {
|
||||
properties = null;
|
||||
}
|
||||
return properties ? baseCopy(properties, result, keys(properties)) : result;
|
||||
}
|
||||
|
||||
export default create;
|
||||
30
object/defaults.js
Normal file
30
object/defaults.js
Normal file
@@ -0,0 +1,30 @@
|
||||
import arrayCopy from '../internal/arrayCopy';
|
||||
import assign from './assign';
|
||||
import assignDefaults from '../internal/assignDefaults';
|
||||
|
||||
/**
|
||||
* Assigns own enumerable properties of source object(s) to the destination
|
||||
* object for all destination properties that resolve to `undefined`. Once a
|
||||
* property is set, additional defaults of the same property are ignored.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Object
|
||||
* @param {Object} object The destination object.
|
||||
* @param {...Object} [sources] The source objects.
|
||||
* @returns {Object} Returns `object`.
|
||||
* @example
|
||||
*
|
||||
* _.defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });
|
||||
* // => { 'user': 'barney', 'age': 36 }
|
||||
*/
|
||||
function defaults(object) {
|
||||
if (object == null) {
|
||||
return object;
|
||||
}
|
||||
var args = arrayCopy(arguments);
|
||||
args.push(assignDefaults);
|
||||
return assign.apply(undefined, args);
|
||||
}
|
||||
|
||||
export default defaults;
|
||||
2
object/extend.js
Normal file
2
object/extend.js
Normal file
@@ -0,0 +1,2 @@
|
||||
import assign from './assign'
|
||||
export default assign;
|
||||
49
object/findKey.js
Normal file
49
object/findKey.js
Normal file
@@ -0,0 +1,49 @@
|
||||
import baseCallback from '../internal/baseCallback';
|
||||
import baseFind from '../internal/baseFind';
|
||||
import baseForOwn from '../internal/baseForOwn';
|
||||
|
||||
/**
|
||||
* This method is like `_.findIndex` except that it returns the key of the
|
||||
* first element `predicate` returns truthy for, instead of the element itself.
|
||||
*
|
||||
* If a property name is provided for `predicate` the created "_.property"
|
||||
* style callback returns the property value of the given element.
|
||||
*
|
||||
* If an object is provided for `predicate` the created "_.matches" style
|
||||
* callback returns `true` for elements that have the properties of the given
|
||||
* object, else `false`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Object
|
||||
* @param {Object} object The object to search.
|
||||
* @param {Function|Object|string} [predicate=_.identity] The function invoked
|
||||
* per iteration. If a property name or object is provided it is used to
|
||||
* create a "_.property" or "_.matches" style callback respectively.
|
||||
* @param {*} [thisArg] The `this` binding of `predicate`.
|
||||
* @returns {string|undefined} Returns the key of the matched element, else `undefined`.
|
||||
* @example
|
||||
*
|
||||
* var users = {
|
||||
* 'barney': { 'age': 36, 'active': true },
|
||||
* 'fred': { 'age': 40, 'active': false },
|
||||
* 'pebbles': { 'age': 1, 'active': true }
|
||||
* };
|
||||
*
|
||||
* _.findKey(users, function(chr) { return chr.age < 40; });
|
||||
* // => 'barney' (iteration order is not guaranteed)
|
||||
*
|
||||
* // using the "_.matches" callback shorthand
|
||||
* _.findKey(users, { 'age': 1 });
|
||||
* // => 'pebbles'
|
||||
*
|
||||
* // using the "_.property" callback shorthand
|
||||
* _.findKey(users, 'active');
|
||||
* // => 'barney'
|
||||
*/
|
||||
function findKey(object, predicate, thisArg) {
|
||||
predicate = baseCallback(predicate, thisArg, 3);
|
||||
return baseFind(object, predicate, baseForOwn, true);
|
||||
}
|
||||
|
||||
export default findKey;
|
||||
49
object/findLastKey.js
Normal file
49
object/findLastKey.js
Normal file
@@ -0,0 +1,49 @@
|
||||
import baseCallback from '../internal/baseCallback';
|
||||
import baseFind from '../internal/baseFind';
|
||||
import baseForOwnRight from '../internal/baseForOwnRight';
|
||||
|
||||
/**
|
||||
* This method is like `_.findKey` except that it iterates over elements of
|
||||
* a collection in the opposite order.
|
||||
*
|
||||
* If a property name is provided for `predicate` the created "_.property"
|
||||
* style callback returns the property value of the given element.
|
||||
*
|
||||
* If an object is provided for `predicate` the created "_.matches" style
|
||||
* callback returns `true` for elements that have the properties of the given
|
||||
* object, else `false`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Object
|
||||
* @param {Object} object The object to search.
|
||||
* @param {Function|Object|string} [predicate=_.identity] The function invoked
|
||||
* per iteration. If a property name or object is provided it is used to
|
||||
* create a "_.property" or "_.matches" style callback respectively.
|
||||
* @param {*} [thisArg] The `this` binding of `predicate`.
|
||||
* @returns {string|undefined} Returns the key of the matched element, else `undefined`.
|
||||
* @example
|
||||
*
|
||||
* var users = {
|
||||
* 'barney': { 'age': 36, 'active': true },
|
||||
* 'fred': { 'age': 40, 'active': false },
|
||||
* 'pebbles': { 'age': 1, 'active': true }
|
||||
* };
|
||||
*
|
||||
* _.findLastKey(users, function(chr) { return chr.age < 40; });
|
||||
* // => returns `pebbles` assuming `_.findKey` returns `barney`
|
||||
*
|
||||
* // using the "_.matches" callback shorthand
|
||||
* _.findLastKey(users, { 'age': 36 });
|
||||
* // => 'barney'
|
||||
*
|
||||
* // using the "_.property" callback shorthand
|
||||
* _.findLastKey(users, 'active');
|
||||
* // => 'pebbles'
|
||||
*/
|
||||
function findLastKey(object, predicate, thisArg) {
|
||||
predicate = baseCallback(predicate, thisArg, 3);
|
||||
return baseFind(object, predicate, baseForOwnRight, true);
|
||||
}
|
||||
|
||||
export default findLastKey;
|
||||
39
object/forIn.js
Normal file
39
object/forIn.js
Normal file
@@ -0,0 +1,39 @@
|
||||
import baseFor from '../internal/baseFor';
|
||||
import bindCallback from '../internal/bindCallback';
|
||||
import keysIn from './keysIn';
|
||||
|
||||
/**
|
||||
* Iterates over own and inherited enumerable properties of an object invoking
|
||||
* `iteratee` for each property. The `iteratee` is bound to `thisArg` and invoked
|
||||
* with three arguments; (value, key, object). Iterator functions may exit
|
||||
* iteration early by explicitly returning `false`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Object
|
||||
* @param {Object} object The object to iterate over.
|
||||
* @param {Function} [iteratee=_.identity] The function invoked per iteration.
|
||||
* @param {*} [thisArg] The `this` binding of `iteratee`.
|
||||
* @returns {Object} Returns `object`.
|
||||
* @example
|
||||
*
|
||||
* function Foo() {
|
||||
* this.a = 1;
|
||||
* this.b = 2;
|
||||
* }
|
||||
*
|
||||
* Foo.prototype.c = 3;
|
||||
*
|
||||
* _.forIn(new Foo, function(value, key) {
|
||||
* console.log(key);
|
||||
* });
|
||||
* // => logs 'a', 'b', and 'c' (iteration order is not guaranteed)
|
||||
*/
|
||||
function forIn(object, iteratee, thisArg) {
|
||||
if (typeof iteratee != 'function' || typeof thisArg != 'undefined') {
|
||||
iteratee = bindCallback(iteratee, thisArg, 3);
|
||||
}
|
||||
return baseFor(object, iteratee, keysIn);
|
||||
}
|
||||
|
||||
export default forIn;
|
||||
35
object/forInRight.js
Normal file
35
object/forInRight.js
Normal file
@@ -0,0 +1,35 @@
|
||||
import baseForRight from '../internal/baseForRight';
|
||||
import bindCallback from '../internal/bindCallback';
|
||||
import keysIn from './keysIn';
|
||||
|
||||
/**
|
||||
* This method is like `_.forIn` except that it iterates over properties of
|
||||
* `object` in the opposite order.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Object
|
||||
* @param {Object} object The object to iterate over.
|
||||
* @param {Function} [iteratee=_.identity] The function invoked per iteration.
|
||||
* @param {*} [thisArg] The `this` binding of `iteratee`.
|
||||
* @returns {Object} Returns `object`.
|
||||
* @example
|
||||
*
|
||||
* function Foo() {
|
||||
* this.a = 1;
|
||||
* this.b = 2;
|
||||
* }
|
||||
*
|
||||
* Foo.prototype.c = 3;
|
||||
*
|
||||
* _.forInRight(new Foo, function(value, key) {
|
||||
* console.log(key);
|
||||
* });
|
||||
* // => logs 'c', 'b', and 'a' assuming `_.forIn ` logs 'a', 'b', and 'c'
|
||||
*/
|
||||
function forInRight(object, iteratee, thisArg) {
|
||||
iteratee = bindCallback(iteratee, thisArg, 3);
|
||||
return baseForRight(object, iteratee, keysIn);
|
||||
}
|
||||
|
||||
export default forInRight;
|
||||
31
object/forOwn.js
Normal file
31
object/forOwn.js
Normal file
@@ -0,0 +1,31 @@
|
||||
import baseForOwn from '../internal/baseForOwn';
|
||||
import bindCallback from '../internal/bindCallback';
|
||||
|
||||
/**
|
||||
* Iterates over own enumerable properties of an object invoking `iteratee`
|
||||
* for each property. The `iteratee` is bound to `thisArg` and invoked with
|
||||
* three arguments; (value, key, object). Iterator functions may exit iteration
|
||||
* early by explicitly returning `false`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Object
|
||||
* @param {Object} object The object to iterate over.
|
||||
* @param {Function} [iteratee=_.identity] The function invoked per iteration.
|
||||
* @param {*} [thisArg] The `this` binding of `iteratee`.
|
||||
* @returns {Object} Returns `object`.
|
||||
* @example
|
||||
*
|
||||
* _.forOwn({ '0': 'zero', '1': 'one', 'length': 2 }, function(n, key) {
|
||||
* console.log(key);
|
||||
* });
|
||||
* // => logs '0', '1', and 'length' (iteration order is not guaranteed)
|
||||
*/
|
||||
function forOwn(object, iteratee, thisArg) {
|
||||
if (typeof iteratee != 'function' || typeof thisArg != 'undefined') {
|
||||
iteratee = bindCallback(iteratee, thisArg, 3);
|
||||
}
|
||||
return baseForOwn(object, iteratee);
|
||||
}
|
||||
|
||||
export default forOwn;
|
||||
28
object/forOwnRight.js
Normal file
28
object/forOwnRight.js
Normal file
@@ -0,0 +1,28 @@
|
||||
import baseForRight from '../internal/baseForRight';
|
||||
import bindCallback from '../internal/bindCallback';
|
||||
import keys from './keys';
|
||||
|
||||
/**
|
||||
* This method is like `_.forOwn` except that it iterates over properties of
|
||||
* `object` in the opposite order.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Object
|
||||
* @param {Object} object The object to iterate over.
|
||||
* @param {Function} [iteratee=_.identity] The function invoked per iteration.
|
||||
* @param {*} [thisArg] The `this` binding of `iteratee`.
|
||||
* @returns {Object} Returns `object`.
|
||||
* @example
|
||||
*
|
||||
* _.forOwnRight({ '0': 'zero', '1': 'one', 'length': 2 }, function(n, key) {
|
||||
* console.log(key);
|
||||
* });
|
||||
* // => logs 'length', '1', and '0' assuming `_.forOwn` logs '0', '1', and 'length'
|
||||
*/
|
||||
function forOwnRight(object, iteratee, thisArg) {
|
||||
iteratee = bindCallback(iteratee, thisArg, 3);
|
||||
return baseForRight(object, iteratee, keys);
|
||||
}
|
||||
|
||||
export default forOwnRight;
|
||||
23
object/functions.js
Normal file
23
object/functions.js
Normal file
@@ -0,0 +1,23 @@
|
||||
import baseFunctions from '../internal/baseFunctions';
|
||||
import keysIn from './keysIn';
|
||||
|
||||
/**
|
||||
* Creates an array of function property names from all enumerable properties,
|
||||
* own and inherited, of `object`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @alias methods
|
||||
* @category Object
|
||||
* @param {Object} object The object to inspect.
|
||||
* @returns {Array} Returns the new array of property names.
|
||||
* @example
|
||||
*
|
||||
* _.functions(_);
|
||||
* // => ['all', 'any', 'bind', ...]
|
||||
*/
|
||||
function functions(object) {
|
||||
return baseFunctions(object, keysIn(object));
|
||||
}
|
||||
|
||||
export default functions;
|
||||
26
object/has.js
Normal file
26
object/has.js
Normal file
@@ -0,0 +1,26 @@
|
||||
/** Used for native method references. */
|
||||
var objectProto = Object.prototype;
|
||||
|
||||
/** Used to check objects for own properties. */
|
||||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||||
|
||||
/**
|
||||
* Checks if `key` exists as a direct property of `object` instead of an
|
||||
* inherited property.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Object
|
||||
* @param {Object} object The object to inspect.
|
||||
* @param {string} key The key to check.
|
||||
* @returns {boolean} Returns `true` if `key` is a direct property, else `false`.
|
||||
* @example
|
||||
*
|
||||
* _.has({ 'a': 1, 'b': 2, 'c': 3 }, 'b');
|
||||
* // => true
|
||||
*/
|
||||
function has(object, key) {
|
||||
return object ? hasOwnProperty.call(object, key) : false;
|
||||
}
|
||||
|
||||
export default has;
|
||||
62
object/invert.js
Normal file
62
object/invert.js
Normal file
@@ -0,0 +1,62 @@
|
||||
import isIterateeCall from '../internal/isIterateeCall';
|
||||
import keys from './keys';
|
||||
|
||||
/** Used for native method references. */
|
||||
var objectProto = Object.prototype;
|
||||
|
||||
/** Used to check objects for own properties. */
|
||||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||||
|
||||
/**
|
||||
* Creates an object composed of the inverted keys and values of `object`.
|
||||
* If `object` contains duplicate values, subsequent values overwrite property
|
||||
* assignments of previous values unless `multiValue` is `true`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Object
|
||||
* @param {Object} object The object to invert.
|
||||
* @param {boolean} [multiValue] Allow multiple values per key.
|
||||
* @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
|
||||
* @returns {Object} Returns the new inverted object.
|
||||
* @example
|
||||
*
|
||||
* _.invert({ 'first': 'fred', 'second': 'barney' });
|
||||
* // => { 'fred': 'first', 'barney': 'second' }
|
||||
*
|
||||
* // without `multiValue`
|
||||
* _.invert({ 'first': 'fred', 'second': 'barney', 'third': 'fred' });
|
||||
* // => { 'fred': 'third', 'barney': 'second' }
|
||||
*
|
||||
* // with `multiValue`
|
||||
* _.invert({ 'first': 'fred', 'second': 'barney', 'third': 'fred' }, true);
|
||||
* // => { 'fred': ['first', 'third'], 'barney': ['second'] }
|
||||
*/
|
||||
function invert(object, multiValue, guard) {
|
||||
if (guard && isIterateeCall(object, multiValue, guard)) {
|
||||
multiValue = null;
|
||||
}
|
||||
var index = -1,
|
||||
props = keys(object),
|
||||
length = props.length,
|
||||
result = {};
|
||||
|
||||
while (++index < length) {
|
||||
var key = props[index],
|
||||
value = object[key];
|
||||
|
||||
if (multiValue) {
|
||||
if (hasOwnProperty.call(result, value)) {
|
||||
result[value].push(key);
|
||||
} else {
|
||||
result[value] = [key];
|
||||
}
|
||||
}
|
||||
else {
|
||||
result[value] = key;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
export default invert;
|
||||
48
object/keys.js
Normal file
48
object/keys.js
Normal file
@@ -0,0 +1,48 @@
|
||||
import isLength from '../internal/isLength';
|
||||
import isNative from '../lang/isNative';
|
||||
import isObject from '../lang/isObject';
|
||||
import shimKeys from '../internal/shimKeys';
|
||||
|
||||
/* Native method references for those with the same name as other `lodash` methods. */
|
||||
var nativeKeys = isNative(nativeKeys = Object.keys) && nativeKeys;
|
||||
|
||||
/**
|
||||
* Creates an array of the own enumerable property names of `object`.
|
||||
*
|
||||
* **Note:** Non-object values are coerced to objects. See the
|
||||
* [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.keys)
|
||||
* for more details.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Object
|
||||
* @param {Object} object The object to inspect.
|
||||
* @returns {Array} Returns the array of property names.
|
||||
* @example
|
||||
*
|
||||
* function Foo() {
|
||||
* this.a = 1;
|
||||
* this.b = 2;
|
||||
* }
|
||||
*
|
||||
* Foo.prototype.c = 3;
|
||||
*
|
||||
* _.keys(new Foo);
|
||||
* // => ['a', 'b'] (iteration order is not guaranteed)
|
||||
*
|
||||
* _.keys('hi');
|
||||
* // => ['0', '1']
|
||||
*/
|
||||
var keys = !nativeKeys ? shimKeys : function(object) {
|
||||
if (object) {
|
||||
var Ctor = object.constructor,
|
||||
length = object.length;
|
||||
}
|
||||
if ((typeof Ctor == 'function' && Ctor.prototype === object) ||
|
||||
(typeof object != 'function' && (length && isLength(length)))) {
|
||||
return shimKeys(object);
|
||||
}
|
||||
return isObject(object) ? nativeKeys(object) : [];
|
||||
};
|
||||
|
||||
export default keys;
|
||||
65
object/keysIn.js
Normal file
65
object/keysIn.js
Normal file
@@ -0,0 +1,65 @@
|
||||
import isArguments from '../lang/isArguments';
|
||||
import isArray from '../lang/isArray';
|
||||
import isIndex from '../internal/isIndex';
|
||||
import isLength from '../internal/isLength';
|
||||
import isObject from '../lang/isObject';
|
||||
import support from '../support';
|
||||
|
||||
/** Used for native method references. */
|
||||
var objectProto = Object.prototype;
|
||||
|
||||
/** Used to check objects for own properties. */
|
||||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||||
|
||||
/**
|
||||
* Creates an array of the own and inherited enumerable property names of `object`.
|
||||
*
|
||||
* **Note:** Non-object values are coerced to objects.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Object
|
||||
* @param {Object} object The object to inspect.
|
||||
* @returns {Array} Returns the array of property names.
|
||||
* @example
|
||||
*
|
||||
* function Foo() {
|
||||
* this.a = 1;
|
||||
* this.b = 2;
|
||||
* }
|
||||
*
|
||||
* Foo.prototype.c = 3;
|
||||
*
|
||||
* _.keysIn(new Foo);
|
||||
* // => ['a', 'b', 'c'] (iteration order is not guaranteed)
|
||||
*/
|
||||
function keysIn(object) {
|
||||
if (object == null) {
|
||||
return [];
|
||||
}
|
||||
if (!isObject(object)) {
|
||||
object = Object(object);
|
||||
}
|
||||
var length = object.length;
|
||||
length = (length && isLength(length) &&
|
||||
(isArray(object) || (support.nonEnumArgs && isArguments(object))) && length) || 0;
|
||||
|
||||
var Ctor = object.constructor,
|
||||
index = -1,
|
||||
isProto = typeof Ctor == 'function' && Ctor.prototype == object,
|
||||
result = Array(length),
|
||||
skipIndexes = length > 0;
|
||||
|
||||
while (++index < length) {
|
||||
result[index] = (index + '');
|
||||
}
|
||||
for (var key in object) {
|
||||
if (!(skipIndexes && isIndex(key, length)) &&
|
||||
!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
|
||||
result.push(key);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
export default keysIn;
|
||||
50
object/mapValues.js
Normal file
50
object/mapValues.js
Normal file
@@ -0,0 +1,50 @@
|
||||
import baseCallback from '../internal/baseCallback';
|
||||
import baseForOwn from '../internal/baseForOwn';
|
||||
|
||||
/**
|
||||
* Creates an object with the same keys as `object` and values generated by
|
||||
* running each own enumerable property of `object` through `iteratee`. The
|
||||
* iteratee function is bound to `thisArg` and invoked with three arguments;
|
||||
* (value, key, object).
|
||||
*
|
||||
* If a property name is provided for `iteratee` the created "_.property"
|
||||
* style callback returns the property value of the given element.
|
||||
*
|
||||
* If an object is provided for `iteratee` the created "_.matches" style
|
||||
* callback returns `true` for elements that have the properties of the given
|
||||
* object, else `false`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Object
|
||||
* @param {Object} object The object to iterate over.
|
||||
* @param {Function|Object|string} [iteratee=_.identity] The function invoked
|
||||
* per iteration. If a property name or object is provided it is used to
|
||||
* create a "_.property" or "_.matches" style callback respectively.
|
||||
* @param {*} [thisArg] The `this` binding of `iteratee`.
|
||||
* @returns {Object} Returns the new mapped object.
|
||||
* @example
|
||||
*
|
||||
* _.mapValues({ 'a': 1, 'b': 2, 'c': 3} , function(n) { return n * 3; });
|
||||
* // => { 'a': 3, 'b': 6, 'c': 9 }
|
||||
*
|
||||
* var users = {
|
||||
* 'fred': { 'user': 'fred', 'age': 40 },
|
||||
* 'pebbles': { 'user': 'pebbles', 'age': 1 }
|
||||
* };
|
||||
*
|
||||
* // using the "_.property" callback shorthand
|
||||
* _.mapValues(users, 'age');
|
||||
* // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
|
||||
*/
|
||||
function mapValues(object, iteratee, thisArg) {
|
||||
var result = {};
|
||||
iteratee = baseCallback(iteratee, thisArg, 3);
|
||||
|
||||
baseForOwn(object, function(value, key, object) {
|
||||
result[key] = iteratee(value, key, object);
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
export default mapValues;
|
||||
52
object/merge.js
Normal file
52
object/merge.js
Normal file
@@ -0,0 +1,52 @@
|
||||
import baseMerge from '../internal/baseMerge';
|
||||
import createAssigner from '../internal/createAssigner';
|
||||
|
||||
/**
|
||||
* Recursively merges own enumerable properties of the source object(s), that
|
||||
* don't resolve to `undefined` into the destination object. Subsequent sources
|
||||
* overwrite property assignments of previous sources. If `customizer` is
|
||||
* provided it is invoked to produce the merged values of the destination and
|
||||
* source properties. If `customizer` returns `undefined` merging is handled
|
||||
* by the method instead. The `customizer` is bound to `thisArg` and invoked
|
||||
* with five arguments; (objectValue, sourceValue, key, object, source).
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Object
|
||||
* @param {Object} object The destination object.
|
||||
* @param {...Object} [sources] The source objects.
|
||||
* @param {Function} [customizer] The function to customize merging properties.
|
||||
* @param {*} [thisArg] The `this` binding of `customizer`.
|
||||
* @returns {Object} Returns `object`.
|
||||
* @example
|
||||
*
|
||||
* var users = {
|
||||
* 'data': [{ 'user': 'barney' }, { 'user': 'fred' }]
|
||||
* };
|
||||
*
|
||||
* var ages = {
|
||||
* 'data': [{ 'age': 36 }, { 'age': 40 }]
|
||||
* };
|
||||
*
|
||||
* _.merge(users, ages);
|
||||
* // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] }
|
||||
*
|
||||
* // using a customizer callback
|
||||
* var object = {
|
||||
* 'fruits': ['apple'],
|
||||
* 'vegetables': ['beet']
|
||||
* };
|
||||
*
|
||||
* var other = {
|
||||
* 'fruits': ['banana'],
|
||||
* 'vegetables': ['carrot']
|
||||
* };
|
||||
*
|
||||
* _.merge(object, other, function(a, b) {
|
||||
* return _.isArray(a) ? a.concat(b) : undefined;
|
||||
* });
|
||||
* // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] }
|
||||
*/
|
||||
var merge = createAssigner(baseMerge);
|
||||
|
||||
export default merge;
|
||||
2
object/methods.js
Normal file
2
object/methods.js
Normal file
@@ -0,0 +1,2 @@
|
||||
import functions from './functions'
|
||||
export default functions;
|
||||
51
object/omit.js
Normal file
51
object/omit.js
Normal file
@@ -0,0 +1,51 @@
|
||||
import arrayMap from '../internal/arrayMap';
|
||||
import baseDifference from '../internal/baseDifference';
|
||||
import baseFlatten from '../internal/baseFlatten';
|
||||
import bindCallback from '../internal/bindCallback';
|
||||
import keysIn from './keysIn';
|
||||
import pickByArray from '../internal/pickByArray';
|
||||
import pickByCallback from '../internal/pickByCallback';
|
||||
|
||||
/**
|
||||
* The opposite of `_.pick`; this method creates an object composed of the
|
||||
* own and inherited enumerable properties of `object` that are not omitted.
|
||||
* Property names may be specified as individual arguments or as arrays of
|
||||
* property names. If `predicate` is provided it is invoked for each property
|
||||
* of `object` omitting the properties `predicate` returns truthy for. The
|
||||
* predicate is bound to `thisArg` and invoked with three arguments;
|
||||
* (value, key, object).
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Object
|
||||
* @param {Object} object The source object.
|
||||
* @param {Function|...(string|string[])} [predicate] The function invoked per
|
||||
* iteration or property names to omit, specified as individual property
|
||||
* names or arrays of property names.
|
||||
* @param {*} [thisArg] The `this` binding of `predicate`.
|
||||
* @returns {Object} Returns the new object.
|
||||
* @example
|
||||
*
|
||||
* var object = { 'user': 'fred', 'age': 40 };
|
||||
*
|
||||
* _.omit(object, 'age');
|
||||
* // => { 'user': 'fred' }
|
||||
*
|
||||
* _.omit(object, _.isNumber);
|
||||
* // => { 'user': 'fred' }
|
||||
*/
|
||||
function omit(object, predicate, thisArg) {
|
||||
if (object == null) {
|
||||
return {};
|
||||
}
|
||||
if (typeof predicate != 'function') {
|
||||
var props = arrayMap(baseFlatten(arguments, false, false, 1), String);
|
||||
return pickByArray(object, baseDifference(keysIn(object), props));
|
||||
}
|
||||
predicate = bindCallback(predicate, thisArg, 3);
|
||||
return pickByCallback(object, function(value, key, object) {
|
||||
return !predicate(value, key, object);
|
||||
});
|
||||
}
|
||||
|
||||
export default omit;
|
||||
30
object/pairs.js
Normal file
30
object/pairs.js
Normal file
@@ -0,0 +1,30 @@
|
||||
import keys from './keys';
|
||||
|
||||
/**
|
||||
* Creates a two dimensional array of the key-value pairs for `object`,
|
||||
* e.g. `[[key1, value1], [key2, value2]]`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Object
|
||||
* @param {Object} object The object to inspect.
|
||||
* @returns {Array} Returns the new array of key-value pairs.
|
||||
* @example
|
||||
*
|
||||
* _.pairs({ 'barney': 36, 'fred': 40 });
|
||||
* // => [['barney', 36], ['fred', 40]] (iteration order is not guaranteed)
|
||||
*/
|
||||
function pairs(object) {
|
||||
var index = -1,
|
||||
props = keys(object),
|
||||
length = props.length,
|
||||
result = Array(length);
|
||||
|
||||
while (++index < length) {
|
||||
var key = props[index];
|
||||
result[index] = [key, object[key]];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
export default pairs;
|
||||
41
object/pick.js
Normal file
41
object/pick.js
Normal file
@@ -0,0 +1,41 @@
|
||||
import baseFlatten from '../internal/baseFlatten';
|
||||
import bindCallback from '../internal/bindCallback';
|
||||
import pickByArray from '../internal/pickByArray';
|
||||
import pickByCallback from '../internal/pickByCallback';
|
||||
|
||||
/**
|
||||
* Creates an object composed of the picked `object` properties. Property
|
||||
* names may be specified as individual arguments or as arrays of property
|
||||
* names. If `predicate` is provided it is invoked for each property of `object`
|
||||
* picking the properties `predicate` returns truthy for. The predicate is
|
||||
* bound to `thisArg` and invoked with three arguments; (value, key, object).
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Object
|
||||
* @param {Object} object The source object.
|
||||
* @param {Function|...(string|string[])} [predicate] The function invoked per
|
||||
* iteration or property names to pick, specified as individual property
|
||||
* names or arrays of property names.
|
||||
* @param {*} [thisArg] The `this` binding of `predicate`.
|
||||
* @returns {Object} Returns the new object.
|
||||
* @example
|
||||
*
|
||||
* var object = { 'user': 'fred', 'age': 40 };
|
||||
*
|
||||
* _.pick(object, 'user');
|
||||
* // => { 'user': 'fred' }
|
||||
*
|
||||
* _.pick(object, _.isString);
|
||||
* // => { 'user': 'fred' }
|
||||
*/
|
||||
function pick(object, predicate, thisArg) {
|
||||
if (object == null) {
|
||||
return {};
|
||||
}
|
||||
return typeof predicate == 'function'
|
||||
? pickByCallback(object, bindCallback(predicate, thisArg, 3))
|
||||
: pickByArray(object, baseFlatten(arguments, false, false, 1));
|
||||
}
|
||||
|
||||
export default pick;
|
||||
41
object/result.js
Normal file
41
object/result.js
Normal file
@@ -0,0 +1,41 @@
|
||||
import isFunction from '../lang/isFunction';
|
||||
|
||||
/**
|
||||
* Resolves the value of property `key` on `object`. If the value of `key` is
|
||||
* a function it is invoked with the `this` binding of `object` and its result
|
||||
* is returned, else the property value is returned. If the property value is
|
||||
* `undefined` the `defaultValue` is used in its place.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Object
|
||||
* @param {Object} object The object to query.
|
||||
* @param {string} key The key of the property to resolve.
|
||||
* @param {*} [defaultValue] The value returned if the property value
|
||||
* resolves to `undefined`.
|
||||
* @returns {*} Returns the resolved value.
|
||||
* @example
|
||||
*
|
||||
* var object = { 'user': 'fred', 'age': _.constant(40) };
|
||||
*
|
||||
* _.result(object, 'user');
|
||||
* // => 'fred'
|
||||
*
|
||||
* _.result(object, 'age');
|
||||
* // => 40
|
||||
*
|
||||
* _.result(object, 'status', 'busy');
|
||||
* // => 'busy'
|
||||
*
|
||||
* _.result(object, 'status', _.constant('busy'));
|
||||
* // => 'busy'
|
||||
*/
|
||||
function result(object, key, defaultValue) {
|
||||
var value = object == null ? undefined : object[key];
|
||||
if (typeof value == 'undefined') {
|
||||
value = defaultValue;
|
||||
}
|
||||
return isFunction(value) ? value.call(object) : value;
|
||||
}
|
||||
|
||||
export default result;
|
||||
62
object/transform.js
Normal file
62
object/transform.js
Normal file
@@ -0,0 +1,62 @@
|
||||
import arrayEach from '../internal/arrayEach';
|
||||
import baseCallback from '../internal/baseCallback';
|
||||
import baseCreate from '../internal/baseCreate';
|
||||
import baseForOwn from '../internal/baseForOwn';
|
||||
import isArray from '../lang/isArray';
|
||||
import isObject from '../lang/isObject';
|
||||
import isTypedArray from '../lang/isTypedArray';
|
||||
|
||||
/**
|
||||
* An alternative to `_.reduce`; this method transforms `object` to a new
|
||||
* `accumulator` object which is the result of running each of its own enumerable
|
||||
* properties through `iteratee`, with each invocation potentially mutating
|
||||
* the `accumulator` object. The `iteratee` is bound to `thisArg` and invoked
|
||||
* with four arguments; (accumulator, value, key, object). Iterator functions
|
||||
* may exit iteration early by explicitly returning `false`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Object
|
||||
* @param {Array|Object} object The object to iterate over.
|
||||
* @param {Function} [iteratee=_.identity] The function invoked per iteration.
|
||||
* @param {*} [accumulator] The custom accumulator value.
|
||||
* @param {*} [thisArg] The `this` binding of `iteratee`.
|
||||
* @returns {*} Returns the accumulated value.
|
||||
* @example
|
||||
*
|
||||
* var squares = _.transform([1, 2, 3, 4, 5, 6], function(result, n) {
|
||||
* n *= n;
|
||||
* if (n % 2) {
|
||||
* return result.push(n) < 3;
|
||||
* }
|
||||
* });
|
||||
* // => [1, 9, 25]
|
||||
*
|
||||
* var mapped = _.transform({ 'a': 1, 'b': 2, 'c': 3 }, function(result, n, key) {
|
||||
* result[key] = n * 3;
|
||||
* });
|
||||
* // => { 'a': 3, 'b': 6, 'c': 9 }
|
||||
*/
|
||||
function transform(object, iteratee, accumulator, thisArg) {
|
||||
var isArr = isArray(object) || isTypedArray(object);
|
||||
iteratee = baseCallback(iteratee, thisArg, 4);
|
||||
|
||||
if (accumulator == null) {
|
||||
if (isArr || isObject(object)) {
|
||||
var Ctor = object.constructor;
|
||||
if (isArr) {
|
||||
accumulator = isArray(object) ? new Ctor : [];
|
||||
} else {
|
||||
accumulator = baseCreate(typeof Ctor == 'function' && Ctor.prototype);
|
||||
}
|
||||
} else {
|
||||
accumulator = {};
|
||||
}
|
||||
}
|
||||
(isArr ? arrayEach : baseForOwn)(object, function(value, index, object) {
|
||||
return iteratee(accumulator, value, index, object);
|
||||
});
|
||||
return accumulator;
|
||||
}
|
||||
|
||||
export default transform;
|
||||
33
object/values.js
Normal file
33
object/values.js
Normal file
@@ -0,0 +1,33 @@
|
||||
import baseValues from '../internal/baseValues';
|
||||
import keys from './keys';
|
||||
|
||||
/**
|
||||
* Creates an array of the own enumerable property values of `object`.
|
||||
*
|
||||
* **Note:** Non-object values are coerced to objects.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Object
|
||||
* @param {Object} object The object to query.
|
||||
* @returns {Array} Returns the array of property values.
|
||||
* @example
|
||||
*
|
||||
* function Foo() {
|
||||
* this.a = 1;
|
||||
* this.b = 2;
|
||||
* }
|
||||
*
|
||||
* Foo.prototype.c = 3;
|
||||
*
|
||||
* _.values(new Foo);
|
||||
* // => [1, 2] (iteration order is not guaranteed)
|
||||
*
|
||||
* _.values('hi');
|
||||
* // => ['h', 'i']
|
||||
*/
|
||||
function values(object) {
|
||||
return baseValues(object, keys(object));
|
||||
}
|
||||
|
||||
export default values;
|
||||
31
object/valuesIn.js
Normal file
31
object/valuesIn.js
Normal file
@@ -0,0 +1,31 @@
|
||||
import baseValues from '../internal/baseValues';
|
||||
import keysIn from './keysIn';
|
||||
|
||||
/**
|
||||
* Creates an array of the own and inherited enumerable property values
|
||||
* of `object`.
|
||||
*
|
||||
* **Note:** Non-object values are coerced to objects.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @category Object
|
||||
* @param {Object} object The object to query.
|
||||
* @returns {Array} Returns the array of property values.
|
||||
* @example
|
||||
*
|
||||
* function Foo() {
|
||||
* this.a = 1;
|
||||
* this.b = 2;
|
||||
* }
|
||||
*
|
||||
* Foo.prototype.c = 3;
|
||||
*
|
||||
* _.valuesIn(new Foo);
|
||||
* // => [1, 2, 3] (iteration order is not guaranteed)
|
||||
*/
|
||||
function valuesIn(object) {
|
||||
return baseValues(object, keysIn(object));
|
||||
}
|
||||
|
||||
export default valuesIn;
|
||||
Reference in New Issue
Block a user