-
Notifications
You must be signed in to change notification settings - Fork 88
feat: add matches function for object pattern matching #380
Copy link
Copy link
Open
Description
Suggestion
A function that creates a predicate function for pattern-matching objects against a given pattern.
⭐ Suggestion
function matches<T>(pattern: Record<Key, any>): (input: T) => boolean {
return (input: T): boolean =>
input == null
? false
: every(
([key, value]) => input[key as keyof T] === value,
entries(pattern),
);
}
export default matches;💻 Use Cases
Similar to Lodash's matches, this function replaces verbose callback functions with concise object patterns.
const users = [
{ name: "John", age: 30, active: true },
{ name: "Jane", age: 25, active: false },
{ name: "Bob", age: 30, active: true }
];
// Before
filter(user => user.age === 30 && user.active === true, users);
// After
filter(matches({ age: 30, active: true }), users);
// [{ name: "John", age: 30, active: true }, { name: "Bob", age: 30, active: true }]
find(matches({ age: 30 }), users); // { name: "John", age: 30, active: true }
some(matches({ age: 25 }), users); // true
every(matches({ active: true }), users); // falseValidate if a single object matches a pattern:
const user = { name: "John", age: 30, active: true };
pipe(user, matches({ age: 30 })); // true
matches({ active: false })(user); // falseReactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels