Rename js snippets
This commit is contained in:
44
snippets/js/s/deep-equality-comparison.md
Normal file
44
snippets/js/s/deep-equality-comparison.md
Normal file
@ -0,0 +1,44 @@
|
||||
---
|
||||
title: Check object equality
|
||||
type: snippet
|
||||
language: javascript
|
||||
tags: [object,array,type,recursion]
|
||||
cover: dying-flowers
|
||||
dateModified: 2021-10-13T19:29:39+02:00
|
||||
---
|
||||
|
||||
Performs a deep comparison between two values to determine if they are equivalent.
|
||||
|
||||
- Check if the two values are identical.
|
||||
- Check if both values are `Date` objects with the same time, using `Date.prototype.getTime()`.
|
||||
- Check if both values are non-object values with an equivalent value (strict comparison).
|
||||
- Check if only one value is `null` or `undefined` or if their prototypes differ.
|
||||
- If none of the above conditions are met, use `Object.keys()` to check if both values have the same number of keys.
|
||||
- Use `Array.prototype.every()` to check if every key in `a` exists in `b` and if they are equivalent by calling `equals()` recursively.
|
||||
|
||||
```js
|
||||
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]));
|
||||
};
|
||||
```
|
||||
|
||||
```js
|
||||
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
|
||||
```
|
||||
Reference in New Issue
Block a user