Reputation: 688
I'm trying to check efficiently if a string matches any of an array of regexes and return true in the first encountered match (Breaking the iteration over the regexes)
My current code:
_.forEach(self._connectedClients, function(client) {
if (client.authenticated) {
var interested = _.forEach(client.interests, function(interest) {
if (evt.event_type.search(interest) != -1) {
return true;
}
});
if (interested) {
self._sendJSON(client.socket, data);
}
}
});
Interest is an array of regexes.
Any suggestions?
Thanks in advance
Upvotes: 7
Views: 2887
Reputation: 173
You could use _.some
, when the function passed returns a truthy value iteration will stop and true will be returned. If it can't find a truthy value it will return false, after iterating through the entire array.
Example:
_.forEach(self._connectedClients, function(client) {
if (client.authenticated) {
if (_.some(client.interests, _.method('test', evt.event_type))) {
self._sendJSON(client.socket, data);
}
}
});
Upvotes: 4
Reputation: 816730
Just use Array#some
:
some()
executes the callback function once for each element present in the array until it finds one where callback returns a true value. If such an element is found,some()
immediately returnstrue
.
var interested = client.interests.some(function(regex) {
return regex.test(evt.event_type);
});
Of course you can also use lodash's _.some
implementation.
Upvotes: 3
Reputation: 21830
If I'm understanding you correctly, using plain javascript, you could do the following to check for matches of a single string over multiple regular expressions.
for(var i = 0; i<x.length; i++) {
var regex = x[i]; console.log('regex', regex);
if( str.match( x[i] ) ) {
console.log("regex:",x[i]," matching: true");
} else {
console.log("regex:",x[i]," matching: false");
}
}
However, if you meant something else, then do clarify. :)
Upvotes: 0