Skip to content

Commit 6098d8d

Browse files
authoredJun 3, 2022
Improve performance of array predicates (#15)
1 parent 4a0ca44 commit 6098d8d

File tree

1 file changed

+23
-9
lines changed

1 file changed

+23
-9
lines changed
 

‎index.js

+23-9
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,29 @@
11
export default function filterObject(object, predicate) {
22
const result = {};
3-
const isArray = Array.isArray(predicate);
43

5-
for (const [key, value] of Object.entries(object)) {
6-
if (isArray ? predicate.includes(key) : predicate(key, value, object)) {
7-
Object.defineProperty(result, key, {
8-
value,
9-
writable: true,
10-
enumerable: true,
11-
configurable: true,
12-
});
4+
if (Array.isArray(predicate)) {
5+
const set = new Set(predicate);
6+
for (const key of Object.keys(object)) {
7+
if (set.has(key)) {
8+
const value = object[key];
9+
Object.defineProperty(result, key, {
10+
value,
11+
writable: true,
12+
enumerable: true,
13+
configurable: true,
14+
});
15+
}
16+
}
17+
} else {
18+
for (const [key, value] of Object.entries(object)) {
19+
if (predicate(key, value, object)) {
20+
Object.defineProperty(result, key, {
21+
value,
22+
writable: true,
23+
enumerable: true,
24+
configurable: true,
25+
});
26+
}
1327
}
1428
}
1529

0 commit comments

Comments
 (0)
Please sign in to comment.