Travis build: 1238

This commit is contained in:
30secondsofcode
2018-01-15 17:12:46 +00:00
parent bdaa93e1d7
commit d02c622ac5
3 changed files with 50 additions and 8 deletions

View File

@ -267,6 +267,7 @@ average(1, 2, 3);
<summary>View contents</summary> <summary>View contents</summary>
* [`cleanObj`](#cleanobj) * [`cleanObj`](#cleanobj)
* [`equals`](#equals-)
* [`functions`](#functions) * [`functions`](#functions)
* [`invertKeyValues`](#invertkeyvalues) * [`invertKeyValues`](#invertkeyvalues)
* [`lowercaseKeys`](#lowercasekeys) * [`lowercaseKeys`](#lowercasekeys)
@ -3998,6 +3999,39 @@ cleanObj(testObj, ['a'], 'children'); // { a: 1, children : { a: 1}}
<br>[⬆ Back to top](#table-of-contents) <br>[⬆ Back to top](#table-of-contents)
### equals ![advanced](/advanced.svg)
Performs a deep comparison between two values to determine if they are equivalent.
Check if the two values are identical, if they are both `Date` objects with the same time, using `Date.getTime()` or if they are both 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, then use `Array.every()` to check if every key in the first value exists in the second one and if they are equivalent by calling this method 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 === null || a === undefined || b === null || b === undefined) return false;
if (a.prototype !== b.prototype) return false;
let keys = Object.keys(a);
if (keys.length !== Object.keys(b).length) return false;
return keys.every(k => equals(a[k], b[k]));
};
```
<details>
<summary>Examples</summary>
```js
equals({ a: [2, { e: 3 }], b: [4], c: 'foo' }, { a: [2, { e: 3 }], b: [4], c: 'foo' }); // true
```
</details>
<br>[⬆ Back to top](#table-of-contents)
### functions ### functions
Returns an array of function property names from own (and optionally inherited) enumerable properties of an object. Returns an array of function property names from own (and optionally inherited) enumerable properties of an object.

File diff suppressed because one or more lines are too long

View File

@ -9,12 +9,9 @@ If none of the above conditions are met, use `Object.keys()` to check if both va
```js ```js
const equals = (a, b) => { const equals = (a, b) => {
if (a === b) return true; if (a === b) return true;
if (a instanceof Date && b instanceof Date) if (a instanceof Date && b instanceof Date) return a.getTime() === b.getTime();
return a.getTime() === b.getTime(); if (!a || !b || (typeof a != 'object' && typeof b !== 'object')) return a === b;
if (!a || !b || (typeof a != 'object' && typeof b !== 'object')) if (a === null || a === undefined || b === null || b === undefined) return false;
return a === b;
if (a === null || a === undefined || b === null || b === undefined)
return false;
if (a.prototype !== b.prototype) return false; if (a.prototype !== b.prototype) return false;
let keys = Object.keys(a); let keys = Object.keys(a);
if (keys.length !== Object.keys(b).length) return false; if (keys.length !== Object.keys(b).length) return false;
@ -23,5 +20,5 @@ const equals = (a, b) => {
``` ```
```js ```js
equals({ a: [2, {e: 3}], b: [4], c: 'foo' }, { a: [2, {e: 3}], b: [4], c: 'foo' }); // true equals({ a: [2, { e: 3 }], b: [4], c: 'foo' }, { a: [2, { e: 3 }], b: [4], c: 'foo' }); // true
``` ```