Run details:
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/114.0
Firefox 114
Windows
Desktop
one year ago
Test name Executions per second
Array.filter 20346.7 Ops/sec
for, continue 68550.6 Ops/sec
for, condition 69394.4 Ops/sec
for..of 19424.3 Ops/sec
Array.reduce 20445.6 Ops/sec
generator, spread 1590.8 Ops/sec
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) {
            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)];