1
0
Fork 0

Update Posts “using-js-sets-to-find-elements”

This commit is contained in:
Jo Wroten 2019-07-09 20:32:22 +00:00
parent c482734d59
commit e40175d8d1

View file

@ -8,7 +8,23 @@ description: >-
loops. loops.
https://gitlab.com/snippets/1873655 ```js
// Example Data
let hugeArray = [...Array(10000).keys()].map(id => { return {id}; }); // [{id:
0}, ..., {id: 9999}]
let needles = [1010, 2020, 3030, 4040, 5050, 6060, 7070, 8080, 9090];
// Finding matching elements
let needlesSet = new Set(needles);
let matches = hugeArray.filter(obj => needlesSet.has(obj.id));
```
--- ---
Functionally for one check, this is identical to checking the `.indexOf()` or `.includes()` of an Array. However, in cases where you're filtering a large array down to match a list of ID's, for example, the nested looping can result in a performance hit. Traditionally hash tables were used for speeding up this search, but with ES2015 we can now leverage Sets which are easier to read and still result in a single loop that's equal to the length of the Array and no more. (Can be further optimized by ending when running out of needles) Functionally for one check, this is identical to checking the `.indexOf()` or `.includes()` of an Array. However, in cases where you're filtering a large array down to match a list of ID's, for example, the nested looping can result in a performance hit. Traditionally hash tables were used for speeding up this search, but with ES2015 we can now leverage Sets which are easier to read and still result in a single loop that's equal to the length of the Array and no more. (Can be further optimized by ending when running out of needles)
@ -21,3 +37,5 @@ let needles = [1010, 2020, 3030, 4040, 5050, 6060, 7070, 8080, 9090];
let needlesSet = new Set(needles); let needlesSet = new Set(needles);
let matches = hugeArray.filter(obj => needlesSet.has(obj.id)); let matches = hugeArray.filter(obj => needlesSet.has(obj.id));
``` ```
https://gitlab.com/snippets/1873655