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); Enter fullscreen mode Exit fullscreen mode Re...
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.

 
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!

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.