mirror of
https://github.com/atlanticbiomedical/biomedjs.git
synced 2025-07-02 00:47:26 -04:00
55 lines
1.9 KiB
JavaScript
55 lines
1.9 KiB
JavaScript
![]() |
/**
|
||
|
* A specialized version of `baseIsEqualDeep` for arrays with support for
|
||
|
* partial deep comparisons.
|
||
|
*
|
||
|
* @private
|
||
|
* @param {Array} array The array to compare.
|
||
|
* @param {Array} other The other array to compare.
|
||
|
* @param {Function} equalFunc The function to determine equivalents of values.
|
||
|
* @param {Function} [customizer] The function to customize comparing arrays.
|
||
|
* @param {boolean} [isLoose] Specify performing partial comparisons.
|
||
|
* @param {Array} [stackA] Tracks traversed `value` objects.
|
||
|
* @param {Array} [stackB] Tracks traversed `other` objects.
|
||
|
* @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
|
||
|
*/
|
||
|
function equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) {
|
||
|
var index = -1,
|
||
|
arrLength = array.length,
|
||
|
othLength = other.length,
|
||
|
result = true;
|
||
|
|
||
|
if (arrLength != othLength && !(isLoose && othLength > arrLength)) {
|
||
|
return false;
|
||
|
}
|
||
|
// Deep compare the contents, ignoring non-numeric properties.
|
||
|
while (result && ++index < arrLength) {
|
||
|
var arrValue = array[index],
|
||
|
othValue = other[index];
|
||
|
|
||
|
result = undefined;
|
||
|
if (customizer) {
|
||
|
result = isLoose
|
||
|
? customizer(othValue, arrValue, index)
|
||
|
: customizer(arrValue, othValue, index);
|
||
|
}
|
||
|
if (result === undefined) {
|
||
|
// Recursively compare arrays (susceptible to call stack limits).
|
||
|
if (isLoose) {
|
||
|
var othIndex = othLength;
|
||
|
while (othIndex--) {
|
||
|
othValue = other[othIndex];
|
||
|
result = (arrValue && arrValue === othValue) || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB);
|
||
|
if (result) {
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
result = (arrValue && arrValue === othValue) || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return !!result;
|
||
|
}
|
||
|
|
||
|
module.exports = equalArrays;
|