Performs a deep comparison between two values to determine if they are equivalent.
Date
objects with the same time, using Date.prototype.getTime()
.null
or undefined
or if their prototypes differ.Object.keys()
to check if both values have the same number of keys.Array.prototype.every()
to check if every key in a
exists in b
and if they are equivalent by calling equals()
recursively.const equals = (a, b) => {
if (a === b) return true;
if (a instanceof Date && b instanceof Date)
return a.getTime() === b.getTime();
if (!a || !b || (typeof a !== 'object' && typeof b !== 'object'))
return a === b;
if (a.prototype !== b.prototype) return false;
const keys = Object.keys(a);
if (keys.length !== Object.keys(b).length) return false;
return keys.every(k => equals(a[k], b[k]));
};
equals(
{ a: [2, { e: 3 }], b: [4], c: 'foo' },
{ a: [2, { e: 3 }], b: [4], c: 'foo' }
); // true
equals([1, 2, 3], { 0: 1, 1: 2, 2: 3 }); // true
Snippet collection
Comparing values in JavaScript is one of the most common tasks, yet it has a lot of things you should bear in mind.
JavaScript, Object
Deeply removes all falsy values from an object or array.
JavaScript, Object
Compares two objects to determine if the first one contains equivalent property values to the second one, based on a provided function.
JavaScript, Object
Compares two objects to determine if the first one contains equivalent property values to the second one.