Add matches, matchesWith

This commit is contained in:
Angelos Chalaris
2018-01-23 20:17:32 +02:00
parent 11a4872cf0
commit 577f490865
3 changed files with 40 additions and 0 deletions

17
snippets/matches.md Normal file
View File

@ -0,0 +1,17 @@
### matches
Compares two objects to determine if the first one contains equivalent property values to the second one.
Use `Object.keys(source)` to get all the keys of the second object, then `Array.every()`, `Object.hasOwnProperty()` and strict comparison to determine if all keys exist in the first object and have the same values.
```js
const matches = (obj, source) =>
Object.keys(source).every(
key => obj.hasOwnProperty(key) && obj[key] === source[key]
);
```
```js
matches({ age: 25, hair: 'long', beard: true }, { hair: 'long', beard: true }) // true
matches({ hair: 'long', beard: true }, { age: 25, hair: 'long', beard: true }) // false
```

21
snippets/matchesWith.md Normal file
View File

@ -0,0 +1,21 @@
### matchesWith
Compares two objects to determine if the first one contains equivalent property values to the second one, based on a provided function.
Use `Object.keys(source)` to get all the keys of the second object, then `Array.every()`, `Object.hasOwnProperty()` and the provided function to determine if all keys exist in the first object and have equivalent values.
If no function is provided, the values will be compared using the equality operator.
```js
const matchesWith = (obj, source, fn) =>
Object.keys(source).every(
key =>
obj.hasOwnProperty(key) && fn
? fn(obj[key], source[key], key, obj, source)
: obj[key] == source[key]
);
```
```js
const isGreeting = val => /^h(?:i|ello)$/.test(val);
matchesWith({ greeting: 'hello' }, { greeting: 'hi' }, (oV, sV) => isGreeting(oV) && isGreeting(sV)); // true
```