DEV Community

Cover image for 1 line of code: How to get every even item of an Array

1 line of code: How to get every even item of an Array

Martin Krause on November 10, 2021

const evenItems = arr = arr.filter((_, index) => index % 2 === 0); Returns an array which contains every even item of the ...
Collapse
 
lexlohr profile image
Alex Lohr •

Or you use the fastest possible version:

const evenItems = (arr, out = [], i) => { for (i = 0; i < arr.length; i = i + 2) out.push(arr[i]); return out; };
Enter fullscreen mode Exit fullscreen mode
Collapse
 
martinkr profile image
Martin Krause •

Hey!

thank you for taking the time to contribute, I put both functions to the performance benchmark on hasty and I'm going to update the article with your suggestion!

Cheers!

Collapse
 
jamesthomson profile image
James Thomson •

+1 for this. I'll always prefer legible over performant unless dealing with code that absolutely requires performance. 99% of the time I'm dealing with small datasets so it isn't necessary. And as you've said below, v8 optimises a lot of these convenience methods.

Collapse
 
jzombie profile image
jzombie • • Edited

I would have thought filter was indeed slower, but not according to this.

Thread Thread
 
martinkr profile image
Martin Krause •

It is one of the cases where performance really depends on the browser / javascript engine.

Thread Thread
 
jzombie profile image
jzombie •

Agreed.

I tested it w/ Chrome, on Mac & Linux. Not sure how Safari / Firefox results may vary.

 
martinkr profile image
Martin Krause •

Appreciate the discussion. Going to use the filter version as I expect the other browsers / javascript engines to catch up in microoptimisations.

Thread Thread
 
lexlohr profile image
Alex Lohr •

Then at least use & instead of % if you care about performance. That difference can't be microoptimized, because the modulo requires float point handling, whereas the binary operation runs directly on the CPU.

 
martinkr profile image
Martin Krause •

Hi Luke,
yes you are right :D Here is the updated benchmark on hasty - filter is much slower for me.

Collapse
 
lexlohr profile image
Alex Lohr •

No, it isn't faster. Not sure what's wrong with your machine, but it's about 20-30% slower on any machine I tested it on.

 
lexlohr profile image
Alex Lohr •

I just ran that test and for was 20% faster on current Chrome.

Collapse
 
martinkr profile image
Martin Krause •

Hi Luke,

you are right filter is more intuitive, but it is actually slower for me.

Cheers!