source: imaps-frontend/node_modules/lodash-es/_equalArrays.js

main
Last change on this file was d565449, checked in by stefan toskovski <stefantoska84@…>, 4 weeks ago

Update repo after prototype presentation

  • Property mode set to 100644
File size: 2.6 KB
Line 
1import SetCache from './_SetCache.js';
2import arraySome from './_arraySome.js';
3import cacheHas from './_cacheHas.js';
4
5/** Used to compose bitmasks for value comparisons. */
6var COMPARE_PARTIAL_FLAG = 1,
7 COMPARE_UNORDERED_FLAG = 2;
8
9/**
10 * A specialized version of `baseIsEqualDeep` for arrays with support for
11 * partial deep comparisons.
12 *
13 * @private
14 * @param {Array} array The array to compare.
15 * @param {Array} other The other array to compare.
16 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
17 * @param {Function} customizer The function to customize comparisons.
18 * @param {Function} equalFunc The function to determine equivalents of values.
19 * @param {Object} stack Tracks traversed `array` and `other` objects.
20 * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
21 */
22function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
23 var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
24 arrLength = array.length,
25 othLength = other.length;
26
27 if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
28 return false;
29 }
30 // Check that cyclic values are equal.
31 var arrStacked = stack.get(array);
32 var othStacked = stack.get(other);
33 if (arrStacked && othStacked) {
34 return arrStacked == other && othStacked == array;
35 }
36 var index = -1,
37 result = true,
38 seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;
39
40 stack.set(array, other);
41 stack.set(other, array);
42
43 // Ignore non-index properties.
44 while (++index < arrLength) {
45 var arrValue = array[index],
46 othValue = other[index];
47
48 if (customizer) {
49 var compared = isPartial
50 ? customizer(othValue, arrValue, index, other, array, stack)
51 : customizer(arrValue, othValue, index, array, other, stack);
52 }
53 if (compared !== undefined) {
54 if (compared) {
55 continue;
56 }
57 result = false;
58 break;
59 }
60 // Recursively compare arrays (susceptible to call stack limits).
61 if (seen) {
62 if (!arraySome(other, function(othValue, othIndex) {
63 if (!cacheHas(seen, othIndex) &&
64 (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
65 return seen.push(othIndex);
66 }
67 })) {
68 result = false;
69 break;
70 }
71 } else if (!(
72 arrValue === othValue ||
73 equalFunc(arrValue, othValue, bitmask, customizer, stack)
74 )) {
75 result = false;
76 break;
77 }
78 }
79 stack['delete'](array);
80 stack['delete'](other);
81 return result;
82}
83
84export default equalArrays;
Note: See TracBrowser for help on using the repository browser.