Using the some() and every() Array Methods

Once upon a time, way back in 2009, ECMAScript 5 introduced many new Array methods. Some of them have turned out to be quite popular, such as indexOf()forEach()map(), and filter(). Others like some() and every(), sadly, have turned out less popular.

Let’s address this issue head-on, shall we?

#The Array.prototype.some() Method

The Array.prototype.some() method determines whether at least one element of the array matches the given predicate. It only returns false if none of the array elements match the predicate value:

function isNegative(x) {
  return x < 0;
}

assert([-10, 0, 10].some(isNegative) === true);
assert([1, 2, 3, 4].some(isNegative) === false);

With the introduction of arrow functions in ECMAScript 2015, we can even inline the predicate function and still maintain readability:

assert([-10, 0, 10].some(x => x < 0) === true);
assert([1, 2, 3, 4].some(x => x < 0) === false);

Note that some() stops iterating over the array as soon as it finds an element that matches the predicate. In that case, it immediately returns true without inspecting the remaining elements. In other words, as long as one value returns true, then it’s true.

The Array.prototype.every() Method

The Array.prototype.every() method determines whether all elements of the array match the predicate:

assert([-10, 0, 10].every(x => x < 0) === false);
assert([-10, 0, 10].every(x => x >= 0) === false);

assert([1, 2, 3, 4].every(x => x < 0) === false);
assert([1, 2, 3, 4].every(x => x >= 0) === true);

Similar to some(), the execution of every() is short-circuited. As soon as every() finds an array element that doesn’t match the predicate, it immediately returns false and doesn’t iterate over the remaining elements. It’s literally the opposite of some().

#Additional Parameters

The predicate function is passed three arguments by both some() and every(): the current array element to test, the index in the array, and the array itself. You can evaluate those parameters however you like to determine whether to return true or false:

function predicate(element, index, array) {
  // ...
}

Just like the other Array methods, some() and every() accept an optional thisArg as the second parameter (after the predicate). It specifies the value to use as this when executing the predicate function.

#Browser Support and Polyfills

Having been released in 2009, ECMAScript 5 has very good browser support these days. From IE 9 onwards, all browsers support some() and every(). However, if you need to support older browsers, both methods can easily be polyfilled by attaching custom implementations to the prototype of the Array object:

Latest articles

How to do Destructuring in JavaScript

What is Destructuring? At its core, destructuring is the idea that we are pulling out values individually from a...

Writable Streams, Streams Piping, and Error Handling in Node.js

A Writable Stream A writable stream is a stream of data that is created to write some streaming data....

Here are Six Front-End Development Channels on YouTube

The Coding Train https://www.youtube.com/watch?v=bKEaK7WNLzM If you love programming then this is the...

Real World Use Cases for JavaScript Proxies

Introduction to Proxy In programming terms, a proxy is an entity that acts on behalf of some other entity....
14.0k Followers
Follow

Related articles

Leave a reply

Please enter your comment!
Please enter your name here