https://github.com/mesqueeb/filter-anything
A simple (TypeScript) integration of "pick" and "omit" to filter props of an object
https://github.com/mesqueeb/filter-anything
delete-props fillables filter filter-fields filter-props guard guarded guarded-props omit pick props-stay typescript wildcard
Last synced: about 1 year ago
JSON representation
A simple (TypeScript) integration of "pick" and "omit" to filter props of an object
- Host: GitHub
- URL: https://github.com/mesqueeb/filter-anything
- Owner: mesqueeb
- License: mit
- Created: 2018-12-15T15:50:47.000Z (over 7 years ago)
- Default Branch: main
- Last Pushed: 2025-02-19T18:49:26.000Z (over 1 year ago)
- Last Synced: 2025-04-11T00:51:38.060Z (about 1 year ago)
- Topics: delete-props, fillables, filter, filter-fields, filter-props, guard, guarded, guarded-props, omit, pick, props-stay, typescript, wildcard
- Language: TypeScript
- Homepage: https://npmjs.com/filter-anything
- Size: 1.85 MB
- Stars: 36
- Watchers: 1
- Forks: 0
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# Filter anything ⚔️
```
npm i filter-anything
```
An implementation that filters out object props like the TypeScript "pick" and "omit".
In the Laravel world, this is also called "fillables" and "guard".
## Motivation
I created this package because I needed:
- be able to filter out object props based on just what we need - aka "pick" props
- be able to filter out object props based on what we don't need - aka "omit" props
- **supports for nested properties**
- supports wildcards `*` for nested properties
- the return type must be TypeScript supported! (see screenshots below)
## Meet the family (more tiny utils with TS support)
- [is-what 🙉](https://github.com/mesqueeb/is-what)
- [is-where 🙈](https://github.com/mesqueeb/is-where)
- [merge-anything 🥡](https://github.com/mesqueeb/merge-anything)
- [check-anything 👁](https://github.com/mesqueeb/check-anything)
- [remove-anything ✂️](https://github.com/mesqueeb/remove-anything)
- [getorset-anything 🐊](https://github.com/mesqueeb/getorset-anything)
- [map-anything 🗺](https://github.com/mesqueeb/map-anything)
- [filter-anything ⚔️](https://github.com/mesqueeb/filter-anything)
- [copy-anything 🎭](https://github.com/mesqueeb/copy-anything)
- [case-anything 🐫](https://github.com/mesqueeb/case-anything)
- [flatten-anything 🏏](https://github.com/mesqueeb/flatten-anything)
- [nestify-anything 🧅](https://github.com/mesqueeb/nestify-anything)
## Usage
### Pick
With `pick` you pass an object and an array of keys of an object - **the props which may stay**.
```js
import { pick } from 'filter-anything'
const squirtle = { id: '007', name: 'Squirtle', type: 'water' }
const newObject = pick(squirtle, ['name', 'type'])
// returns { name: 'Squirtle', type: 'water' }
```
### Omit
With `omit` you pass an object and an array of keys of an object - the props which should be removed.
```js
import { omit } from 'filter-anything'
const squirtle = { id: '007', name: 'Squirtle', type: 'water' }
const withoutId = omit(squirtle, ['id'])
// returns { name: 'Squirtle', type: 'water' }
```
### Aliases
`pick()` and `omit()` can also be imported with the names `fillable()` and `guard()`. This pays homage to my history with Laravel. 😉
### TypeScript
TypeScript users will love this, because, as you can see, the result has the correct type automatically!


### Nested props
In the example below we want to get rid of the **nested property** called "discard".
```js
const doc = { items: { keep: '📌', discard: '✂️' } }
pick(doc, ['items.keep'])
// returns {items: {keep: '📌'}}
omit(doc, ['items.discard'])
// returns {items: {keep: '📌'}}
```
> Please note that TypeScript users will need to cast the result when using nested props.
## Wildcards
Yes! You can also work with wildcards by using `*` in the path.
```js
const doc = {
123: { keep: '📌', discard: '✂️' },
456: { keep: '📌', discard: '✂️' },
}
// use wildcard *
omit(doc, ['*.discard'])
// returns {
// '123': {keep: '📌'},
// '456': {keep: '📌'}
// }
```
> Please note that TypeScript users will need to cast the result when using wildcards props.
Feel free to open issues for any requests, questions or bugs!