@spartacus/core
Version:
Spartacus - the core framework
76 lines • 8.73 kB
JavaScript
export function shallowEqualObjects(objA, objB) {
if (objA === objB) {
return true;
}
if (!objA || !objB) {
return false;
}
const aKeys = Object.keys(objA);
const bKeys = Object.keys(objB);
const aKeysLen = aKeys.length;
const bKeysLen = bKeys.length;
if (aKeysLen !== bKeysLen) {
return false;
}
for (let i = 0; i < aKeysLen; i++) {
const key = aKeys[i];
if (objA[key] !== objB[key]) {
return false;
}
}
return true;
}
export function deepEqualObjects(objA, objB) {
if (objA === objB) {
return true; // if both objA and objB are null or undefined and exactly the same
}
else if (!(objA instanceof Object) || !(objB instanceof Object)) {
return false; // if they are not strictly equal, they both need to be Objects
}
else if (objA.constructor !== objB.constructor) {
// they must have the exact same prototype chain, the closest we can do is
// test their constructor.
return false;
}
else {
for (const key in objA) {
if (!objA.hasOwnProperty(key)) {
continue; // other properties were tested using objA.constructor === y.constructor
}
if (!objB.hasOwnProperty(key)) {
return false; // allows to compare objA[ key ] and objB[ key ] when set to undefined
}
if (objA[key] === objB[key]) {
continue; // if they have the same strict value or identity then they are equal
}
if (typeof objA[key] !== 'object') {
return false; // Numbers, Strings, Functions, Booleans must be strictly equal
}
if (!deepEqualObjects(objA[key], objB[key])) {
return false;
}
}
for (const key in objB) {
if (objB.hasOwnProperty(key) && !objA.hasOwnProperty(key)) {
return false;
}
}
return true;
}
}
export function countOfDeepEqualObjects(obj, arr) {
return arr.reduce((acc, curr) => {
if (deepEqualObjects(obj, curr)) {
acc++;
}
return acc;
}, 0);
}
export function indexOfFirstOccurrence(obj, arr) {
for (let index = 0; index < arr.length; index++) {
if (deepEqualObjects(arr[index], obj)) {
return index;
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGFyZS1lcXVhbC1vYmplY3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvdXRpbC9jb21wYXJlLWVxdWFsLW9iamVjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLG1CQUFtQixDQUFDLElBQVksRUFBRSxJQUFZO0lBQzVELElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtRQUNqQixPQUFPLElBQUksQ0FBQztLQUNiO0lBQ0QsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtRQUNsQixPQUFPLEtBQUssQ0FBQztLQUNkO0lBQ0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDOUIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUU5QixJQUFJLFFBQVEsS0FBSyxRQUFRLEVBQUU7UUFDekIsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDakMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMzQixPQUFPLEtBQUssQ0FBQztTQUNkO0tBQ0Y7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsSUFBWSxFQUFFLElBQVk7SUFDekQsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLENBQUMsbUVBQW1FO0tBQ2pGO1NBQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxZQUFZLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLFlBQVksTUFBTSxDQUFDLEVBQUU7UUFDakUsT0FBTyxLQUFLLENBQUMsQ0FBQywrREFBK0Q7S0FDOUU7U0FBTSxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRTtRQUNoRCwwRUFBMEU7UUFDMUUsMEJBQTBCO1FBQzFCLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7U0FBTTtRQUNMLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM3QixTQUFTLENBQUMsd0VBQXdFO2FBQ25GO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzdCLE9BQU8sS0FBSyxDQUFDLENBQUMsc0VBQXNFO2FBQ3JGO1lBQ0QsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUMzQixTQUFTLENBQUMscUVBQXFFO2FBQ2hGO1lBQ0QsSUFBSSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxRQUFRLEVBQUU7Z0JBQ2pDLE9BQU8sS0FBSyxDQUFDLENBQUMsK0RBQStEO2FBQzlFO1lBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDM0MsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUNGO1FBQ0QsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7WUFDdEIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDekQsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7S0FDYjtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsR0FBUSxFQUFFLEdBQWU7SUFDL0QsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO1FBQzlCLElBQUksZ0JBQWdCLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQy9CLEdBQUcsRUFBRSxDQUFDO1NBQ1A7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNSLENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLEdBQVEsRUFDUixHQUFlO0lBRWYsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDL0MsSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7WUFDckMsT0FBTyxLQUFLLENBQUM7U0FDZDtLQUNGO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBzaGFsbG93RXF1YWxPYmplY3RzKG9iakE6IG9iamVjdCwgb2JqQjogb2JqZWN0KTogYm9vbGVhbiB7XG4gIGlmIChvYmpBID09PSBvYmpCKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKCFvYmpBIHx8ICFvYmpCKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGFLZXlzID0gT2JqZWN0LmtleXMob2JqQSk7XG4gIGNvbnN0IGJLZXlzID0gT2JqZWN0LmtleXMob2JqQik7XG4gIGNvbnN0IGFLZXlzTGVuID0gYUtleXMubGVuZ3RoO1xuICBjb25zdCBiS2V5c0xlbiA9IGJLZXlzLmxlbmd0aDtcblxuICBpZiAoYUtleXNMZW4gIT09IGJLZXlzTGVuKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYUtleXNMZW47IGkrKykge1xuICAgIGNvbnN0IGtleSA9IGFLZXlzW2ldO1xuICAgIGlmIChvYmpBW2tleV0gIT09IG9iakJba2V5XSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZXBFcXVhbE9iamVjdHMob2JqQTogb2JqZWN0LCBvYmpCOiBvYmplY3QpOiBib29sZWFuIHtcbiAgaWYgKG9iakEgPT09IG9iakIpIHtcbiAgICByZXR1cm4gdHJ1ZTsgLy8gaWYgYm90aCBvYmpBIGFuZCBvYmpCIGFyZSBudWxsIG9yIHVuZGVmaW5lZCBhbmQgZXhhY3RseSB0aGUgc2FtZVxuICB9IGVsc2UgaWYgKCEob2JqQSBpbnN0YW5jZW9mIE9iamVjdCkgfHwgIShvYmpCIGluc3RhbmNlb2YgT2JqZWN0KSkge1xuICAgIHJldHVybiBmYWxzZTsgLy8gaWYgdGhleSBhcmUgbm90IHN0cmljdGx5IGVxdWFsLCB0aGV5IGJvdGggbmVlZCB0byBiZSBPYmplY3RzXG4gIH0gZWxzZSBpZiAob2JqQS5jb25zdHJ1Y3RvciAhPT0gb2JqQi5jb25zdHJ1Y3Rvcikge1xuICAgIC8vIHRoZXkgbXVzdCBoYXZlIHRoZSBleGFjdCBzYW1lIHByb3RvdHlwZSBjaGFpbiwgdGhlIGNsb3Nlc3Qgd2UgY2FuIGRvIGlzXG4gICAgLy8gdGVzdCB0aGVpciBjb25zdHJ1Y3Rvci5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqQSkge1xuICAgICAgaWYgKCFvYmpBLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgY29udGludWU7IC8vIG90aGVyIHByb3BlcnRpZXMgd2VyZSB0ZXN0ZWQgdXNpbmcgb2JqQS5jb25zdHJ1Y3RvciA9PT0geS5jb25zdHJ1Y3RvclxuICAgICAgfVxuICAgICAgaWYgKCFvYmpCLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhbGxvd3MgdG8gY29tcGFyZSBvYmpBWyBrZXkgXSBhbmQgb2JqQlsga2V5IF0gd2hlbiBzZXQgdG8gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICBpZiAob2JqQVtrZXldID09PSBvYmpCW2tleV0pIHtcbiAgICAgICAgY29udGludWU7IC8vIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSBzdHJpY3QgdmFsdWUgb3IgaWRlbnRpdHkgdGhlbiB0aGV5IGFyZSBlcXVhbFxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBvYmpBW2tleV0gIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTsgLy8gTnVtYmVycywgU3RyaW5ncywgRnVuY3Rpb25zLCBCb29sZWFucyBtdXN0IGJlIHN0cmljdGx5IGVxdWFsXG4gICAgICB9XG4gICAgICBpZiAoIWRlZXBFcXVhbE9iamVjdHMob2JqQVtrZXldLCBvYmpCW2tleV0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqQikge1xuICAgICAgaWYgKG9iakIuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAhb2JqQS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50T2ZEZWVwRXF1YWxPYmplY3RzKG9iajogYW55LCBhcnI6IEFycmF5PGFueT4pOiBudW1iZXIge1xuICByZXR1cm4gYXJyLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiB7XG4gICAgaWYgKGRlZXBFcXVhbE9iamVjdHMob2JqLCBjdXJyKSkge1xuICAgICAgYWNjKys7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIDApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhPZkZpcnN0T2NjdXJyZW5jZShcbiAgb2JqOiBhbnksXG4gIGFycjogQXJyYXk8YW55PlxuKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFyci5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBpZiAoZGVlcEVxdWFsT2JqZWN0cyhhcnJbaW5kZXhdLCBvYmopKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG59XG4iXX0=