From c482734d59c734016769d1cd1bd082025d7b7d1c Mon Sep 17 00:00:00 2001 From: Jo Wroten Date: Tue, 9 Jul 2019 20:30:09 +0000 Subject: [PATCH] =?UTF-8?q?Create=20Posts=20=E2=80=9Cusing-js-sets-to-find?= =?UTF-8?q?-elements=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../posts/using-js-sets-to-find-elements.md | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 content/posts/using-js-sets-to-find-elements.md diff --git a/content/posts/using-js-sets-to-find-elements.md b/content/posts/using-js-sets-to-find-elements.md new file mode 100644 index 0000000..13fd937 --- /dev/null +++ b/content/posts/using-js-sets-to-find-elements.md @@ -0,0 +1,23 @@ +--- +title: 'Using JS Set''s to Find Elements ' +date: 2019-07-09T20:27:09.247Z +tags: + - Tech +description: >- + JS's `new Set()` can be the new Hash table optimization for reducing nested + loops. + + + https://gitlab.com/snippets/1873655 +--- +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) + +```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)); +```