proposal-array-filtering
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];
Champions
- Justin Ridgewell (@jridgewell)
Status
Current Stage: 1
Motivation
Array.p.filter
is confusing. I constantly have to ask myself "am I
keeping, or filtering out the current item?".
- "Keeping"
-
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.
Polyfill
A polyfill is available in the core-js library. You can find it in the ECMAScript proposals section.
Ongoing Discussions
- Supporting Data from HTTP Archive and GitHub Archive
- What should
filterOut
be called? - Should
partition
be included?
Related
- Ruby
- Underscore
_.select
(aliased to _.filter)_.reject
_.partition
- Lodash