mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-11 03:17:49 +00:00
Bump to v0.7.0.
Former-commit-id: 7c51a310c7c62bfe0ba9a2cdea4e074e633cee70
This commit is contained in:
18
vendor/underscore/underscore.js
vendored
18
vendor/underscore/underscore.js
vendored
@@ -770,7 +770,7 @@
|
||||
};
|
||||
|
||||
// Internal recursive comparison function for `isEqual`.
|
||||
var eq = function(a, b, stack) {
|
||||
var eq = function(a, b, aStack, bStack) {
|
||||
// Identical objects are equal. `0 === -0`, but they aren't identical.
|
||||
// See the Harmony `egal` proposal: http://wiki.ecmascript.org/doku.php?id=harmony:egal.
|
||||
if (a === b) return a !== 0 || 1 / a == 1 / b;
|
||||
@@ -811,14 +811,15 @@
|
||||
if (typeof a != 'object' || typeof b != 'object') return false;
|
||||
// Assume equality for cyclic structures. The algorithm for detecting cyclic
|
||||
// structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
|
||||
var length = stack.length;
|
||||
var length = aStack.length;
|
||||
while (length--) {
|
||||
// Linear search. Performance is inversely proportional to the number of
|
||||
// unique nested structures.
|
||||
if (stack[length] == a) return true;
|
||||
if (aStack[length] == a) return bStack[length] == b;
|
||||
}
|
||||
// Add the first object to the stack of traversed objects.
|
||||
stack.push(a);
|
||||
aStack.push(a);
|
||||
bStack.push(b);
|
||||
var size = 0, result = true;
|
||||
// Recursively compare objects and arrays.
|
||||
if (className == '[object Array]') {
|
||||
@@ -829,7 +830,7 @@
|
||||
// Deep compare the contents, ignoring non-numeric properties.
|
||||
while (size--) {
|
||||
// Ensure commutative equality for sparse arrays.
|
||||
if (!(result = size in a == size in b && eq(a[size], b[size], stack))) break;
|
||||
if (!(result = size in a == size in b && eq(a[size], b[size], aStack, bStack))) break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -841,7 +842,7 @@
|
||||
// Count the expected number of properties.
|
||||
size++;
|
||||
// Deep compare each member.
|
||||
if (!(result = _.has(b, key) && eq(a[key], b[key], stack))) break;
|
||||
if (!(result = _.has(b, key) && eq(a[key], b[key], aStack, bStack))) break;
|
||||
}
|
||||
}
|
||||
// Ensure that both objects contain the same number of properties.
|
||||
@@ -853,13 +854,14 @@
|
||||
}
|
||||
}
|
||||
// Remove the first object from the stack of traversed objects.
|
||||
stack.pop();
|
||||
aStack.pop();
|
||||
bStack.pop();
|
||||
return result;
|
||||
};
|
||||
|
||||
// Perform a deep comparison to check if two objects are equal.
|
||||
_.isEqual = function(a, b) {
|
||||
return eq(a, b, []);
|
||||
return eq(a, b, [], []);
|
||||
};
|
||||
|
||||
// Is a given array, string, or object empty?
|
||||
|
||||
Reference in New Issue
Block a user