Re-assign or filter?
Karan
Posted on October 31, 2018
Hi Everyone!
A simple post here, taking a look at the comparison between what I did and what was the best solution for CodeWars Array.diff 6 Kyu problem.
Problem
Given two arrays a and b, remove items all b items from a and return, in case they don't match return a.
What I did?
- Go through each item in b using a forEach loop.
- If you find the item in a remove it and reassign a using filter function.
- Goto point 1 and get next item from b.
- When no more items left in b, return the new a.
function array_diff_ME(a, b) {
b.forEach(function(item, index){
a = a.filter(x=>x===item?false:true);
});
return a;
}
array_diff([1,2,3,4], [4,1,3]);
So what's the problem?
It uses an extra forEach loop which is not needed, and problem can be solved just by using a single filter function.
The Better Solution
As it turns out, a single filter function on a can do the trick. It works as follows:
- Go through each item in a and check if the item exists in b using the indexOf function.
- If indexOf(item) is -1, then filter function returns a true and that value is kept in a through filter, however if indexOf(item) is not -1 then filter function returns a false and item is filtered OUT of a.
- Return the new a.
Here's the 'pseudo'-pseudocode!
function array_diff_PEOPLE_WHO_STUFF(a, b) {
a.filter({if (b.indexOf(current item of a) is -1) then
return false;
else
return true;
});
return a;
}
Hope you liked this, just like I liked documenting another sub-optimal way of getting stuff done :), TTYL!
💖 💪 🙅 🚩
Karan
Posted on October 31, 2018
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.