Skip to content

Commit f6341be

Browse files
author
Simon he
committed
feature: add quickFilter
1 parent 0cc7dda commit f6341be

File tree

5 files changed

+71
-1
lines changed

5 files changed

+71
-1
lines changed

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
- deepMerge // Object.assign的深度拷贝版本,返回合并后传入的第一个对象
44
- asyncPool // limit:控制异步并发执行的数量,tasks:异步任务数组
55
- quickFind // quickFind(array: any[], key: any),返回一个新的实例,在实例中find方法可以根据key查找对应的项,查找效率O(1)
6+
- quickFilter // quickFilter(array: any[], key: string | number | Array<string | number>, value: string | number | RegExp), 快速模糊查找key名字的项,支持正则匹配
67

78
## 使用方法
89
### deepMerge
@@ -13,3 +14,5 @@
1314
![asyncPool](assets/asyncPool.png)
1415
### quickFind
1516
![quickFind](assets/quickFind.png)
17+
### quickFilter
18+
![quickFilter](assets/quickFilter.png)

assets/quickFilter.png

60.2 KB
Loading

src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ export { deepCompare } from './deepCompare'
33
export { deepMerge } from './deepMerge'
44
export { asyncPool } from './asyncPool'
55
export { quickFind } from './quickFind'
6+
export { quickFilter } from './quickFilter'

src/quickFilter.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
export function quickFilter(array: any[], key: string | number | Array<string | number>, value: string | number | RegExp) {
2+
const val = String(value)
3+
return array.filter(item => {
4+
if (Array.isArray(key)) {
5+
return key.some(k => findItem(item, k, val))
6+
} else {
7+
return findItem(item, key, val)
8+
}
9+
})
10+
function findItem(item: Record<any, any>, key: string | number, value: string | RegExp): boolean {
11+
const reg = new RegExp(value)
12+
return reg.test(item[key])
13+
}
14+
}
15+

test/basic.test.ts

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { describe, expect, it } from 'vitest'
2-
import { asyncPool, deepCompare, deepMerge, quickFind } from '../src'
2+
import { asyncPool, deepCompare, deepMerge, quickFind, quickFilter } from '../src'
33

44
describe('Test 1', () => {
55
it('deepMerge test', () => {
@@ -173,3 +173,54 @@ describe('Test 4', () => {
173173
`)
174174
})
175175
})
176+
177+
describe('Test 5', () => {
178+
it('quickFilter test', async () => {
179+
const arr = [
180+
{
181+
name: 'simon',
182+
age: 18,
183+
id: 0,
184+
},
185+
{
186+
name: 'simon1',
187+
age: 19,
188+
id: 1,
189+
},
190+
{
191+
name: 'simon2',
192+
age: 29,
193+
id: 2,
194+
},
195+
{
196+
name: 'simon3',
197+
age: 29,
198+
id: 20,
199+
},
200+
{
201+
name: 'simon3',
202+
age: 39,
203+
id: 22,
204+
},
205+
{
206+
name: 'simon5',
207+
age: 49,
208+
id: 3,
209+
},
210+
]
211+
expect(quickFilter(arr, ['age', 'id'], '3')).toMatchInlineSnapshot(`
212+
[
213+
{
214+
"age": 39,
215+
"id": 22,
216+
"name": "simon3",
217+
},
218+
{
219+
"age": 49,
220+
"id": 3,
221+
"name": "simon5",
222+
},
223+
]
224+
`)
225+
})
226+
})

0 commit comments

Comments
 (0)