DEV Community

Cover image for Quick JavaScript Tip: the some() method

Quick JavaScript Tip: the some() method

Matt Sparks on May 22, 2019

I recently learned of a great JavaScript method I'd never used. It was brought to my attention by Wes Bos. The some() method is a convenient way to...
Collapse
 
attacomsian profile image
Atta • Edited

I think .includes() is better than .some() for checking if an array contains a value or not:

const animals = ['dogs', 'cats', 'snakes', 'birds', 'pandas'];
animals.includes('snakes'); // true

.some() is good for other use-cases like finding if a value > 15 exists in an array:

[2, 15, 18, 5, 4].some(x => x > 15);  // true
Collapse
 
mattsparks profile image
Matt Sparks

I agree, .includes() would be a better solution for the specific problem I laid out. I just wanted to give a simple bit of code to illustrate how .some() works.

I'll try and add a second example to show another use-case.

Thanks!

Collapse
 
washingtonsteven profile image
Steven Washington

I was thinking the same string, but some reminds me of a function I wrote a long time ago (in PHP) called someValidStrings which checked an array to make sure that there was at least 1 value that was correctly typed as a String, and also fulfilled some other business logic on what was considered "valid" (think: string length, ends with a run of 3 numbers, etc.). This is a case that some would excel at with the function callback rather than just looking for a certain value.

I was thinking that I could use find for the same purpose, but I see that there's a logical benefit to returning a boolean directly rather than a value that would have to be checked. I imagine find, some and findIndex work very similarly and only really differ in what they return.

Collapse
 
mitchelllogan profile image
Logan Mitchell • Edited

It is quite handy!

I used .some() coupled with .includes() a while back to cross-reference two string arrays to make sure the user had at least one of the required roles for an action. The benefit of .some() here is that it will return true no matter how many of the iterations are false, as long as one of them is true.

//sample data
let userRoles = ['a','b','c','d'];
let validRoles = ['c','d','e','f'];
//end sample data

private isRoleValid(userRoles: string[], validRoles: string[]) {
    return userRoles && userRoles.some(e => validRoles.includes(e));
}
Collapse
 
jecsham profile image
Jecsham

Nice post!

A strange example 😅:

// check for types! in this case, check if your array has a number
["str", "str2", {key: 3}, 5].some(x => typeof x === "number"); // true
["str", "str2", {key: 3}, "5"].some(x => typeof x === "number"); // false
Collapse
 
nirmalpatel59 profile image
nirmalpatel59

can't we use simply animals.indexOf("snakes") > -1

Collapse
 
kip13 profile image
kip
Collapse
 
mattsparks profile image
Matt Sparks

You can! That's the beauty of code, there's usually more than one way to solve a problem. It all comes down to preference and the task at hand.

Collapse
 
wkenya profile image
Wes

Reminds me of LINQ, very useful to have this in JS. Thanks for the post.

Collapse
 
pedrojimenez73 profile image
PedroJimenez73

Nice post Matt and very useful!

Thank you!

P.S. I also use .includes() but careful, ie doesn't support it.

Collapse
 
jai_type profile image
Jai Sandhu

Amazing, thank you for sharing

Collapse
 
nickkaczmarek profile image
Nick Kaczmarek

This could also be accomplished with filter and then calling length, right?

Collapse
 
mattsparks profile image
Matt Sparks

Yep!

Collapse
 
93alan profile image
Alan Montgomery

This could be very useful ! Never ever heard of this function or used it! Seems really nice together with the arrow function syntax! Thank you!!

Collapse
 
c0d3rm0nk3y profile image
Peter

Interesting. I can see some immediate uses now for my rss project. Thank you