Script Preparation code:
x
 
var arr  = Array.from({ length: 10000 }, Math.random);
var TARGET_VALUE = 0.95;
function* filter(iter, f) {
    for (const it of iter) {
        if (f(it)) {
            yield it;
        }
    }
}
Tests:
  • Array.filter

     
    return arr.filter(x => x >= TARGET_VALUE);
  • for, continue

     
    const farr = [];
    for (let i = 0, len = arr.length; i < len; ++i) {
        if (arr[i] < TARGET_VALUE) {
            continue;
        }
        farr.push(arr[i]);
    }
    return farr;
  • for, condition

     
    const farr = [];
    for (let i = 0, len = arr.length; i < len; ++i) {
        if (arr[i] >= TARGET_VALUE) {
          farr.push(arr[i]);
        }
    }
    return farr;
  • for..of

     
    const farr = [];
    for (const x of arr) {
        if (x >= TARGET_VALUE) {
            farr.push(x);
        }
    }
    return farr;
  • Array.reduce

     
    return arr.reduce(
        (a, b) => {
            if (b >= TARGET_VALUE) {
                a.push(b);
            }
            return a;
        },
        [],
    );
  • generator, spread

     
    return [...filter(arr, x => x >= TARGET_VALUE)];
Rendered benchmark preparation results:

Suite status: <idle, ready to run>

Previous results

Experimental features:

  • Test case name Result
    Array.filter
    for, continue
    for, condition
    for..of
    Array.reduce
    generator, spread

    Fastest: N/A

    Slowest: N/A

Latest run results:
Run details: (Test run date: one year ago)
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.67
Chrome 114 on Windows
View result in a separate tab
Test name Executions per second
Array.filter 2091.5 Ops/sec
for, continue 1076.3 Ops/sec
for, condition 1078.1 Ops/sec
for..of 1932.6 Ops/sec
Array.reduce 2084.1 Ops/sec
generator, spread 1786.7 Ops/sec