Я думаю, что если вы в порядке с .startsWith()
, это будет очень чистое и читаемое решение без регулярных выражений.Они могут быть не нужны здесь:
result = this.state.data.filter(record => {
return (
record.name.starsWith(this.state.name) ||
record.email.starsWith(this.state.email) ||
record.body.starsWith(this.state.body)
);
});
.startsWith()
не поддерживается IE , но вы можете заполнить его, как описано здесь :
if (!String.prototype.startsWith) {
Object.defineProperty(String.prototype, 'startsWith', {
value: function(search, pos) {
pos = !pos || pos < 0 ? 0 : +pos;
return this.substring(pos, pos + search.length) === search;
}
});
}
РЕДАКТИРОВАТЬ:
Если вы хотите, чтобы все фильтры соответствовали, просто используйте &&
вместо ||
.Кроме того, если вы хотите найти строку в любом месте данных (и не только в начале), код может выглядеть следующим образом:
result = this.state.data.filter(record => {
return (
record.name.indexOf(this.state.name) !== -1 &&
record.email.indexOf(this.state.email) !== -1 &&
record.body.indexOf(this.state.body) !== -1
);
});
Это все равно позволяет избежать использования RegEx, потому что в этом нет необходимости.