diff --git a/snippets/matches.md b/snippets/matches.md new file mode 100644 index 000000000..1be130fb0 --- /dev/null +++ b/snippets/matches.md @@ -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 +``` diff --git a/snippets/matchesWith.md b/snippets/matchesWith.md new file mode 100644 index 000000000..e3777e780 --- /dev/null +++ b/snippets/matchesWith.md @@ -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 +``` diff --git a/tag_database b/tag_database index 0673b023a..13ab2ef68 100644 --- a/tag_database +++ b/tag_database @@ -124,6 +124,8 @@ mapKeys:object,function mapObject:array,object mapValues:object,function mask:string,utility,regexp +matches:object,type +matchesWith:object,type,function maxBy:math,array,function maxN:array,math median:math,array