mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-12 20:07:49 +00:00
Add _.negate, _.keysIn and _.valuesIn.
This commit is contained in:
148
lodash.js
148
lodash.js
@@ -4568,9 +4568,7 @@
|
|||||||
*/
|
*/
|
||||||
function reject(collection, predicate, thisArg) {
|
function reject(collection, predicate, thisArg) {
|
||||||
predicate = lodash.createCallback(predicate, thisArg, 3);
|
predicate = lodash.createCallback(predicate, thisArg, 3);
|
||||||
return filter(collection, function(value, index, collection) {
|
return filter(collection, negate(predicate));
|
||||||
return !predicate(value, index, collection);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -5930,26 +5928,21 @@
|
|||||||
* this.y = 0;
|
* this.y = 0;
|
||||||
* }
|
* }
|
||||||
*
|
*
|
||||||
* Shape.prototype.move = function(x, y) {
|
* Shape.prototype.z = 0;
|
||||||
* this.x += x;
|
|
||||||
* this.y += y;
|
|
||||||
* };
|
|
||||||
*
|
*
|
||||||
* _.forInRight(new Shape, function(value, key) {
|
* _.forInRight(new Shape, function(value, key) {
|
||||||
* console.log(key);
|
* console.log(key);
|
||||||
* });
|
* });
|
||||||
* // => logs 'move', 'y', and 'x' assuming `_.forIn ` logs 'x', 'y', and 'move'
|
* // => logs 'z', 'y', and 'x' assuming `_.forIn ` logs 'x', 'y', and 'z'
|
||||||
*/
|
*/
|
||||||
function forInRight(object, callback, thisArg) {
|
function forInRight(object, callback, thisArg) {
|
||||||
var pairs = [];
|
var props = keysIn(object),
|
||||||
baseForIn(object, function(value, key) {
|
length = props.length;
|
||||||
pairs.push(key, value);
|
|
||||||
});
|
|
||||||
|
|
||||||
var length = pairs.length;
|
|
||||||
callback = baseCreateCallback(callback, thisArg, 3);
|
callback = baseCreateCallback(callback, thisArg, 3);
|
||||||
while (length--) {
|
while (length--) {
|
||||||
if (callback(pairs[length--], pairs[length], object) === false) {
|
var prop = props[length];
|
||||||
|
if (callback(object[prop], prop, object) === false) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -6568,6 +6561,35 @@
|
|||||||
return nativeKeys(object);
|
return nativeKeys(object);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an array of the own and inherited enumerable property names of `object`.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
* @memberOf _
|
||||||
|
* @category Objects
|
||||||
|
* @param {Object} object The object to inspect.
|
||||||
|
* @returns {Array} Returns the array of property names.
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* function Shape() {
|
||||||
|
* this.x = 0;
|
||||||
|
* this.y = 0;
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* Shape.prototype.z = 0;
|
||||||
|
*
|
||||||
|
* _.keysIn(new Shape);
|
||||||
|
* // => ['x', 'y', 'z'] (property order is not guaranteed across environments)
|
||||||
|
*/
|
||||||
|
function keysIn(object) {
|
||||||
|
var result = [];
|
||||||
|
|
||||||
|
baseForIn(object, function(value, key) {
|
||||||
|
result.push(key);
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an object with the same keys as `object` and values generated by
|
* Creates an object with the same keys as `object` and values generated by
|
||||||
* running each own enumerable property of `object` through the callback.
|
* running each own enumerable property of `object` through the callback.
|
||||||
@@ -6722,37 +6744,17 @@
|
|||||||
* // => { 'name': 'fred' }
|
* // => { 'name': 'fred' }
|
||||||
*/
|
*/
|
||||||
function omit(object, predicate, thisArg) {
|
function omit(object, predicate, thisArg) {
|
||||||
var result = {};
|
if (typeof predicate == 'function') {
|
||||||
|
|
||||||
if (typeof predicate != 'function') {
|
|
||||||
var omitProps = baseFlatten(arguments, true, false, 1),
|
|
||||||
length = omitProps.length;
|
|
||||||
|
|
||||||
while (length--) {
|
|
||||||
omitProps[length] = String(omitProps[length]);
|
|
||||||
}
|
|
||||||
var props = [];
|
|
||||||
baseForIn(object, function(value, key) {
|
|
||||||
props.push(key);
|
|
||||||
});
|
|
||||||
|
|
||||||
var index = -1;
|
|
||||||
props = baseDifference(props, omitProps);
|
|
||||||
length = props.length;
|
|
||||||
|
|
||||||
while (++index < length) {
|
|
||||||
var key = props[index];
|
|
||||||
result[key] = object[key];
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
predicate = lodash.createCallback(predicate, thisArg, 3);
|
predicate = lodash.createCallback(predicate, thisArg, 3);
|
||||||
baseForIn(object, function(value, key, object) {
|
return pick(object, negate(predicate));
|
||||||
if (!predicate(value, key, object)) {
|
|
||||||
result[key] = value;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
return result;
|
var omitProps = baseFlatten(arguments, true, false, 1),
|
||||||
|
length = omitProps.length;
|
||||||
|
|
||||||
|
while (length--) {
|
||||||
|
omitProps[length] = String(omitProps[length]);
|
||||||
|
}
|
||||||
|
return pick(object, baseDifference(keysIn(object), omitProps));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -6918,6 +6920,36 @@
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an array composed of the own and inherited enumerable property
|
||||||
|
* values of `object`.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
* @memberOf _
|
||||||
|
* @category Objects
|
||||||
|
* @param {Object} object The object to inspect.
|
||||||
|
* @returns {Array} Returns the new array of property values.
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* function Shape(x, y) {
|
||||||
|
* this.x = x;
|
||||||
|
* this.y = y;
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* Shape.prototype.z = 0;
|
||||||
|
*
|
||||||
|
* _.valuesIn(new Shape(2, 1));
|
||||||
|
* // => [2, 1, 0] (property order is not guaranteed across environments)
|
||||||
|
*/
|
||||||
|
function valuesIn(object) {
|
||||||
|
var result = [];
|
||||||
|
|
||||||
|
baseForIn(object, function(value) {
|
||||||
|
result.push(value);
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -7842,6 +7874,33 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a function that negates the result of `func`. The `func` function
|
||||||
|
* is executed with the `this` binding and arguments of the created function.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
* @memberOf _
|
||||||
|
* @category Utilities
|
||||||
|
* @param {Function} func The function to negate.
|
||||||
|
* @returns {Function} Returns the new function.
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* function isEven(num) {
|
||||||
|
* return num % 2 == 0;
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));
|
||||||
|
* // => [1, 3, 5]
|
||||||
|
*/
|
||||||
|
function negate(func) {
|
||||||
|
if (!isFunction(func)) {
|
||||||
|
throw new TypeError;
|
||||||
|
}
|
||||||
|
return function() {
|
||||||
|
return !func.apply(this, arguments);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reverts the '_' variable to its previous value and returns a reference to
|
* Reverts the '_' variable to its previous value and returns a reference to
|
||||||
* the `lodash` function.
|
* the `lodash` function.
|
||||||
@@ -8148,6 +8207,7 @@
|
|||||||
lodash.invert = invert;
|
lodash.invert = invert;
|
||||||
lodash.invoke = invoke;
|
lodash.invoke = invoke;
|
||||||
lodash.keys = keys;
|
lodash.keys = keys;
|
||||||
|
lodash.keysIn = keysIn;
|
||||||
lodash.map = map;
|
lodash.map = map;
|
||||||
lodash.mapValues = mapValues;
|
lodash.mapValues = mapValues;
|
||||||
lodash.matches = matches;
|
lodash.matches = matches;
|
||||||
@@ -8155,6 +8215,7 @@
|
|||||||
lodash.memoize = memoize;
|
lodash.memoize = memoize;
|
||||||
lodash.merge = merge;
|
lodash.merge = merge;
|
||||||
lodash.min = min;
|
lodash.min = min;
|
||||||
|
lodash.negate = negate;
|
||||||
lodash.omit = omit;
|
lodash.omit = omit;
|
||||||
lodash.once = once;
|
lodash.once = once;
|
||||||
lodash.pairs = pairs;
|
lodash.pairs = pairs;
|
||||||
@@ -8180,6 +8241,7 @@
|
|||||||
lodash.union = union;
|
lodash.union = union;
|
||||||
lodash.uniq = uniq;
|
lodash.uniq = uniq;
|
||||||
lodash.values = values;
|
lodash.values = values;
|
||||||
|
lodash.valuesIn = valuesIn;
|
||||||
lodash.where = where;
|
lodash.where = where;
|
||||||
lodash.without = without;
|
lodash.without = without;
|
||||||
lodash.wrap = wrap;
|
lodash.wrap = wrap;
|
||||||
|
|||||||
@@ -9264,6 +9264,7 @@
|
|||||||
'defer',
|
'defer',
|
||||||
'delay',
|
'delay',
|
||||||
'memoize',
|
'memoize',
|
||||||
|
'negate',
|
||||||
'once',
|
'once',
|
||||||
'partial',
|
'partial',
|
||||||
'partialRight',
|
'partialRight',
|
||||||
@@ -9274,7 +9275,7 @@
|
|||||||
|
|
||||||
var acceptFalsey = _.difference(allMethods, rejectFalsey);
|
var acceptFalsey = _.difference(allMethods, rejectFalsey);
|
||||||
|
|
||||||
test('should accept falsey arguments', 182, function() {
|
test('should accept falsey arguments', 184, function() {
|
||||||
var emptyArrays = _.map(falsey, function() { return []; }),
|
var emptyArrays = _.map(falsey, function() { return []; }),
|
||||||
isExposed = '_' in root,
|
isExposed = '_' in root,
|
||||||
oldDash = root._;
|
oldDash = root._;
|
||||||
@@ -9343,7 +9344,7 @@
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
test('should reject falsey arguments', 14, function() {
|
test('should reject falsey arguments', 15, function() {
|
||||||
_.forEach(rejectFalsey, function(methodName) {
|
_.forEach(rejectFalsey, function(methodName) {
|
||||||
var expected = _.map(falsey, function() { return true; }),
|
var expected = _.map(falsey, function() { return true; }),
|
||||||
func = _[methodName];
|
func = _[methodName];
|
||||||
|
|||||||
Reference in New Issue
Block a user