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
You can use the includes() method in JavaScript to check if an item exists in an array. You can also use it to check if a substring exists within a string. It returns true if the item is found in the array/string and false if the item doesn't exist.
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);
}
}
});
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With