A proposal to add Array.prototype.filterReject.

const array = [1, 2, 3, 4, 5];

// filter keeps the items that return true.
array.filter(i => (i < 3)); // => [1, 2];

// filterReject removes the items that return true.
array.filterReject(i => (i < 3)); // => [3, 4, 5];



Current Stage: 1


Array.p.filter is confusing. I constantly have to ask myself "am I keeping, or filtering out the current item?".


Implies that returning true would keep the current item.

"Filtering out"

Implies that returning true would remove the current item.

Array.p.filter acts as "keeping". But when I think of the word "filter", I think of "filtering out". So every time that I attempt to write an array filter, I end up writing the opposite of what I intended.

Array.p.filterReject attempts to fix this confusion. By providing a clearly named filtering function that matches my intuition, I'm able what will happen when calling filterReject. And because it exists, I'm able to assume that filter does something different, so it must be "keep" version.


A polyfill is available in the core-js library. You can find it in the ECMAScript proposals section.

Ongoing Discussions