var undefined;
/** Used as the semantic version number. */
- var VERSION = '4.17.15';
+ var VERSION = '4.17.20';
/** Error message constants. */
var FUNC_ERROR_TEXT = 'Expected a function';
if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
return false;
}
+ // Check that cyclic values are equal.
+ var arrStacked = stack.get(array);
+ var othStacked = stack.get(other);
+ if (arrStacked && othStacked) {
+ return arrStacked == other && othStacked == array;
+ }
var index = -1,
result = true,
seen = (bitmask & COMPARE_UNORDERED_FLAG) ? [] : undefined;
return false;
}
}
+ // Check that cyclic values are equal.
+ var objStacked = stack.get(object);
+ var othStacked = stack.get(other);
+ if (objStacked && othStacked) {
+ return objStacked == other && othStacked == object;
+ }
var result = true;
var skipCtor = isPartial;
* // The `_.property` iteratee shorthand.
* _.filter(users, 'active');
* // => objects for ['barney']
+ *
+ * // Combining several predicates using `_.overEvery` or `_.overSome`.
+ * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));
+ * // => objects for ['fred', 'barney']
*/
function filter(collection, predicate) {
return baseFilter(collection, baseIteratee(predicate));
* var users = [
* { 'user': 'fred', 'age': 48 },
* { 'user': 'barney', 'age': 36 },
- * { 'user': 'fred', 'age': 40 },
+ * { 'user': 'fred', 'age': 30 },
* { 'user': 'barney', 'age': 34 }
* ];
*
* _.sortBy(users, [function(o) { return o.user; }]);
- * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
+ * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]
*
* _.sortBy(users, ['user', 'age']);
- * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]
+ * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]
*/
function sortBy(collection, iteratee) {
var index = 0;
* values against any array or object value, respectively. See `_.isEqual`
* for a list of supported value comparisons.
*
+ * **Note:** Multiple values can be checked by combining several matchers
+ * using `_.overSome`
+ *
* @static
* @memberOf _
* @since 3.0.0
*
* _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));
* // => [{ 'a': 4, 'b': 5, 'c': 6 }]
+ *
+ * // Checking for several possible values
+ * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));
+ * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]
*/
function matches(source) {
return baseMatches(assign({}, source));