Matthew Rideout
Matthew Rideout

Reputation: 8566

JavaScript Array.find Regex

I have 2 arrays of keywords. I need to figure out the index of the first keyword in array 1 that matches any of the keywords in array 2.

Examples

array1 = ['spinach', 'avocado', 'milk', 'beans', 'ham', 'eggs', 'cheese'];
array2 = ['cheese', 'milk'];

In this example, milk at index 2 would be the first match, and I want to return the index of 2.

Can I use array.find() to return the index of the first match, if each element is compared to array2 using regex?

Upvotes: 4

Views: 3123

Answers (4)

Mohammad Usman
Mohammad Usman

Reputation: 39392

You can find matching index using findIndex() and includes():

let index = array1.findIndex(s => array2.includes(s));

Demo:

let a1 = ['spinach', 'avocado', 'milk', 'beans', 'ham', 'eggs', 'cheese'],
    a2 = ['cheese', 'milk'];

let index = a1.findIndex(s => a2.includes(s));

console.log(index);

Docs:

Upvotes: 2

NetMage
NetMage

Reputation: 26936

You could create a regular expression from array2 and then use Array.findIndex:

var re = new RegExp('^'+array2.join('|')+'$');
var found = array1.findIndex(function (e) { return re.test(e); });

Upvotes: 1

CertainPerformance
CertainPerformance

Reputation: 371233

Use .findIndex instead:

const array1 = ['spinach', 'avocado', 'milk', 'beans', 'ham', 'eggs', 'cheese'];
const array2 = ['cheese', 'milk'];
const foundIndex = array1.findIndex(elm => array2.includes(elm));
console.log(foundIndex);

Upvotes: 1

Nina Scholz
Nina Scholz

Reputation: 386883

You could use Array#findIndex and check the second array with Array#includes.

var array1 = ['spinach', 'avocado', 'milk', 'beans', 'ham', 'eggs', 'cheese'],
    array2 = ['cheese', 'milk'];
    
console.log(array1.findIndex(v => array2.includes(v)));

Upvotes: 3

Related Questions