MCPcopy Index your code
hub / github.com/nodejs/node / objEquiv

Function objEquiv

lib/internal/util/comparisons.js:982–1041  ·  view source on GitHub ↗
(a, b, mode, keys1, keys2, memos, iterationType)

Source from the content-addressed store, hash-verified

980}
981
982function objEquiv(a, b, mode, keys1, keys2, memos, iterationType) {
983 // The pair must have equivalent values for every corresponding key.
984 if (keys2.length > 0) {
985 let i = 0;
986 // Ordered keys
987 if (keys1 !== undefined) {
988 for (; i < keys2.length; i++) {
989 const key = keys2[i];
990 if (keys1[i] !== key) {
991 break;
992 }
993 if (!innerDeepEqual(a[key], b[key], mode, memos)) {
994 return false;
995 }
996 }
997 }
998 // Unordered keys
999 for (; i < keys2.length; i++) {
1000 const key = keys2[i];
1001 // It is faster to get the whole descriptor and to check it's enumerable
1002 // property in V8 13.0 compared to calling Object.propertyIsEnumerable()
1003 // and accessing the property regularly.
1004 const descriptor = ObjectGetOwnPropertyDescriptor(a, key);
1005 if (descriptor === undefined || descriptor.enumerable !== true) {
1006 return false;
1007 }
1008 const value = descriptor.writable !== undefined ? descriptor.value : a[key];
1009 if (!innerDeepEqual(value, b[key], mode, memos)) {
1010 return false;
1011 }
1012 }
1013 }
1014
1015 if (iterationType === kIsArray) {
1016 if (mode === kPartial) {
1017 return partialArrayEquiv(a, b, mode, memos);
1018 }
1019 for (let i = 0; i < a.length; i++) {
1020 if (b[i] === undefined) {
1021 if (!hasOwn(b, i))
1022 return sparseArrayEquiv(a, b, mode, memos, i);
1023 if ((a[i] !== undefined || !hasOwn(a, i)) && (mode !== kLoose || a[i] !== null))
1024 return false;
1025 } else if ((a[i] === undefined || !innerDeepEqual(a[i], b[i], mode, memos)) &&
1026 (mode !== kLoose || b[i] !== null)) {
1027 return false;
1028 }
1029 }
1030 } else if (iterationType === kIsSet) {
1031 if (!setEquiv(a, b, mode, memos)) {
1032 return false;
1033 }
1034 } else if (iterationType === kIsMap) {
1035 if (!mapEquiv(a, b, mode, memos)) {
1036 return false;
1037 }
1038 }
1039

Callers 2

keyCheckFunction · 0.85
handleCyclesFunction · 0.85

Calls 5

innerDeepEqualFunction · 0.85
partialArrayEquivFunction · 0.85
sparseArrayEquivFunction · 0.85
setEquivFunction · 0.85
mapEquivFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…