{"id":15540954,"url":"https://github.com/thundermiracle/filter-data","last_synced_at":"2025-10-24T02:20:56.274Z","repository":{"id":37912215,"uuid":"226486221","full_name":"thundermiracle/filter-data","owner":"thundermiracle","description":"filter data by transducer","archived":false,"fork":false,"pushed_at":"2025-03-27T06:51:50.000Z","size":1602,"stargazers_count":8,"open_issues_count":11,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-29T15:05:20.885Z","etag":null,"topics":["filter-data","partial-search"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thundermiracle.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-12-07T09:27:51.000Z","updated_at":"2025-03-21T11:04:32.000Z","dependencies_parsed_at":"2023-12-17T08:20:16.870Z","dependency_job_id":"a65ad6fa-0bbc-4560-81e6-d04b6d74d323","html_url":"https://github.com/thundermiracle/filter-data","commit_stats":{"total_commits":192,"total_committers":4,"mean_commits":48.0,"dds":"0.42708333333333337","last_synced_commit":"626caa1fdc4579fe3d4f43d3625b062e50f1a8ea"},"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thundermiracle%2Ffilter-data","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thundermiracle%2Ffilter-data/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thundermiracle%2Ffilter-data/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thundermiracle%2Ffilter-data/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thundermiracle","download_url":"https://codeload.github.com/thundermiracle/filter-data/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246273533,"owners_count":20750904,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["filter-data","partial-search"],"created_at":"2024-10-02T12:14:53.165Z","updated_at":"2025-10-24T02:20:51.252Z","avatar_url":"https://github.com/thundermiracle.png","language":"TypeScript","readme":"# filter-data\n\n[![npm version](https://badge.fury.io/js/filter-data.svg)](https://badge.fury.io/js/filter-data)\n[![dependencies Status](https://david-dm.org/thundermiracle/filter-data/status.svg)](https://david-dm.org/thundermiracle/filter-data)\n[![CircleCI](https://img.shields.io/circleci/build/github/thundermiracle/filter-data/master)](https://circleci.com/gh/thundermiracle/filter-data)\n[![codecov](https://img.shields.io/codecov/c/github/thundermiracle/filter-data)](https://codecov.io/gh/thundermiracle/filter-data)\n\n## Description\n\nSimple but fast data filter.\n\n## Examples\n\n1. [Example In Browser](https://codesandbox.io/s/filter-data-browser-stxj8?file=/index.html)\n1. [Example In React](https://codesandbox.io/s/filter-data-react-iw534?file=/src/getData.js)\n\n## Benchmark\n\n### _100 Records_(ms)\n\n  _*The results are little different in partial search._\n\n|  | match-sorter (6.3.1) | fuse.js (6.6.2) | filter-data (0.2.0) |\n| :--- | :--: | :-: | :--: |\n| match all, 1 key | 10.947ms | 4.244ms | \u003cspan style=\"color: green\"\u003e1.827ms\u003c/span\u003e |\n| no match, 1 key | \u003cspan style=\"color: green\"\u003e0.523ms\u003c/span\u003e | 2.385ms | 2.958ms |\n| match partial, 1 key | \u003cspan style=\"color: green\"\u003e0.232ms\u003c/span\u003e | 0.318ms | 2.475ms |\n| match all, 2 keys | 1.472ms | \u003cspan style=\"color: green\"\u003e0.465ms\u003c/span\u003e | 2.209ms |\n| no match, 2 keys | \u003cspan style=\"color: green\"\u003e0.188ms\u003c/span\u003e | 0.513ms | 2.522ms |\n| match partial, 2 keys | \u003cspan style=\"color: green\"\u003e0.191ms\u003c/span\u003e | 0.318ms | 2.475ms |\n| match all, 1 key, slice(0,10) | \u003cspan style=\"color: green\"\u003e0.192ms\u003c/span\u003e | 0.206ms | 0.388ms |\n| no match, 1 key, slice(0,10) | 0.101ms | 0.317ms | \u003cspan style=\"color: green\"\u003e0.079ms\u003c/span\u003e |\n| match partial, 1 key, slice(0,10) | \u003cspan style=\"color: green\"\u003e0.107ms\u003c/span\u003e | 0.188ms | 2.807ms |\n| input empty | 0.114ms | 0.095ms | \u003cspan style=\"color: green\"\u003e0.033ms\u003c/span\u003e |\n\n### _10000 Records_(ms)\n\n  _*The results are little different in partial search._\n\n|  | match-sorter (4.0.2) | fuse.js (3.4.6) | filter-data (0.2.0) |\n| :--- | :--: | :-: | :--: |\n| match all, 1 key | 21.439ms | 49.336ms | \u003cspan style=\"color: green\"\u003e16.884ms\u003c/span\u003e |\n| no match, 1 key | 18.239ms | 33.312ms | \u003cspan style=\"color: green\"\u003e6.382ms\u003c/span\u003e |\n| match partial, 1 key | 18.754ms | 22.56ms | \u003cspan style=\"color: green\"\u003e3.805ms\u003c/span\u003e |\n| match all, 2 keys | 22.815ms | 22.524ms | \u003cspan style=\"color: green\"\u003e10.416ms\u003c/span\u003e |\n| no match, 2 keys | 18.096ms | 33.232ms | \u003cspan style=\"color: green\"\u003e3.744ms\u003c/span\u003e |\n| match partial, 2 keys | 16.821ms | 27.052ms | \u003cspan style=\"color: green\"\u003e3.094ms\u003c/span\u003e |\n| match all, 1 key, slice(0,10) | 10.614ms | 12.692ms | \u003cspan style=\"color: green\"\u003e0.106ms\u003c/span\u003e |\n| no match, 1 key, slice(0,10) | 9.808ms | 19.709ms | \u003cspan style=\"color: green\"\u003e0.111ms\u003c/span\u003e |\n| match partial, 1 key, slice(0,10) | 9.593ms | 16.094ms | \u003cspan style=\"color: green\"\u003e0.393ms\u003c/span\u003e |\n| input empty | 10.571ms | 6.985ms | \u003cspan style=\"color: green\"\u003e0.03ms\u003c/span\u003e |\n\n## Install From Browser\n\n```html\n\u003cscript src=\"https://cdn.jsdelivr.net/npm/filter-data@0.2.0/dist/filterdata.min.js\"\u003e\u003c/script\u003e\n```\n\n## Installation\n\nfilter-data is available as an [npm package](https://www.npmjs.org/package/filter-data).\n\n```sh\nnpm install --save filter-data\n```\n\n## Usage\n\n### From Browser\n\nimport from FilterData object. And others are the same with [From npm](#from-npm)\n\n```js\nconst { filterData, SearchType } = FilterData;\n.\n.\n.\n```\n\n### From npm\n\n1. search single key only.\n\n    ```js\n    import { filterData, SearchType } from 'filter-data';\n\n    // search firstName contains 'dan' and age \u003c 20\n    const searchConditions = [\n      {\n        key: 'firstName',\n        value: 'dan',\n        type: SearchType.LK,\n      },\n      {\n        key: 'age',\n        value: 20,\n        type: SearchType.LT,\n      },\n    ];\n\n    const result = filterData(data, searchConditions);\n    // output:\n    \u003c!-- [\n      { firstName: 'Daniel', age: 14 },\n      { firstName: 'Dan', age: 18 },\n    ] --\u003e\n    ```\n\n1. search multiple keys.\n\n    ```js\n    import { filterData, SearchType } from 'filter-data';\n\n    // search firstName\u0026lastName contains 'dan' and age \u003c 20\n    const searchConditions = [\n      {\n        key: ['firstName', 'lastName'],\n        value: 'dan',\n        type: SearchType.LK,\n      },\n      {\n        key: 'age',\n        value: 20,\n        type: SearchType.LT,\n      },\n    ];\n\n    const result = filterData(data, searchConditions);\n    // output:\n    \u003c!-- [\n      { firstName: 'Daniel', lastName: 'Johnson', age: 13 },\n      { firstName: 'Jack', lastName: 'Danny', age: 19 },\n    ] --\u003e\n    ```\n\n1. caseSensitive.\n\n    ```js\n    import { filterData, SearchType } from 'filter-data';\n\n    // search firstName contains 'dan'\n    const searchConditions = [\n      {\n        key: 'firstName',\n        value: 'dan',\n        type: SearchType.LK,\n      },\n    ];\n\n    const result = filterData(data, searchConditions, { caseSensitive: true });\n    // output:\n    \u003c!-- [\n      { firstName: 'Jordan', age: 17 },\n    ] --\u003e\n    ```\n\n1. offset \u0026 limit.\n\n    ```js\n    import { filterData, SearchType } from 'filter-data';\n\n    // search firstName contains 'dan'\n    const searchConditions = [\n      {\n        key: 'firstName',\n        value: 'dan',\n        type: SearchType.LK,\n      },\n    ];\n\n    const result = filterData(data, searchConditions, { caseSensitive: true, offset: 10, limit: 10 });\n    // output:\n    \u003c!-- [\n      { firstName: 'Jordan', age: 17 },\n      .\n      .\n      .\n      max 10 records\n    ] --\u003e\n    ```\n\n1. search nested object.\n\n    ```js\n    import { filterData, SearchType } from 'filter-data';\n\n    // search firstName in father's sub object equals to 'dan'\n    const searchConditions = [\n      {\n        key: 'father.firstName', // or key: [['father', 'firstName']]\n        value: 'dan',\n        type: SearchType.EQ,\n      },\n    ];\n\n    const result = filterData(data, searchConditions);\n    // output:\n    \u003c!-- [\n      { firstName: 'Jordan', age: 17, father: { firstName: 'dan', age: 50 } },\n    ] --\u003e\n    ```\n\n## Instructions\n\n| No.   |      Parameter      | required | Default | Description |\n|:---|:-------------:|:---------:|:--------------|:-----------|\n| 1 |  data | 〇 | | array of object for filtering |\n| 2 |  searchConditions | 〇 | | array of searchCondition; ```{ key: 'search column', value: 'search value', type: 'search type' }``` |\n| 3 |  options |  | ```{ caseSensitive: false, includeNull: false, offset: undefined, limit: undefined }``` | includeNull: include data even `key` is not exist or `value` is null |\n\n### SearchType\n\n* ```SearchType.EQ```: equal\n* ```SearchType.GT```: greater than\n* ```SearchType.GTE```: greater than or equal\n* ```SearchType.LT```: less than\n* ```SearchType.LTE```: less than or equal\n* ```SearchType.LK```: like\n* ```SearchType.NE```: not equal\n* ```SearchType.NLK```: not like\n\n## License\n\nThis project is licensed under the terms of the\n[MIT license](/LICENSE).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthundermiracle%2Ffilter-data","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthundermiracle%2Ffilter-data","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthundermiracle%2Ffilter-data/lists"}