Попытка сократить избыточный код Javascript - PullRequest
0 голосов
/ 14 декабря 2018

Это рабочий код JavaScript.Тем не менее, это выглядит избыточным для меня.Есть ли способ убрать это?

let text = 'Some search text';

const searchMatch = 
entry.title.toLowerCase().includes(text.toLowerCase()) || 
entry.description.toLowerCase().includes(text.toLowerCase()) || 
entry.keywords.toLowerCase().includes(text.toLowerCase());

return searchMatch;

Ответы [ 3 ]

0 голосов
/ 14 декабря 2018

Вы можете сделать что-то вроде этого:

const text = 'Some search text'.toLowerCase();

return [entry.title, entry.description, entry.keywords].some(s => s.toLowerCase().includes(text));
0 голосов
/ 14 декабря 2018

Вы можете просто использовать оператор возврата в одну строку, включающий массив, состоящий из entry.description, entry.keywords и entry.title, а затем использовать Array.prototype.some() для возврата логического значения (true/ false) значение в зависимости от того, пройден ли какой-либо из тестов:

return [entry.description, entry.keywords, entry.title].some(string => string.toLowerCase().includes('Some search text'.toLowerCase());

Вот, в сущности, разбивка каждой части:

[entry.description, entry.keywords, entry.title].some(...)

Это делает анонимный массив, состоящий изentry.description, entry.keywords и entry.title (порядок не имеет значения) и выполняет итерацию по нему методом Array.prototype.some().Согласно странице MDN , .some():

Метод some() проверяет, прошел ли хотя бы один элемент в массиве тест, реализованный предоставленной функцией.

По существу выполняет итерацию по каждому элементу и в зависимости от обратного вызова от предоставленной функции и предоставляет логическое значение (true, если хотя бы один элемент в массиве проходит тест, false, если нет элементовпройти тест).

string => string.toLowerCase().includes('Some search text'.toLowerCase())

Это анонимная функция, содержащаяся в методе .some(), которая принимает один параметр string.Затем он возвращает логическое значение, в зависимости от результата метода .includes().Метод .includes() возвращает другое логическое значение, в зависимости от того, содержит ли string в нижнем регистре 'Some search text' в нижнем регистре.Это глоток, но в двух словах, строка кода выше гласит:

Если string в нижнем регистре включает 'Some search text' в нижнем регистре, вернуть true - в противном случае вернуть false.

Надеюсь, это поможет вам!

0 голосов
/ 14 декабря 2018

Вместо этого вы можете использовать массив и .some тест:

const textLower = text.toLowerCase();
return ['title', 'description', 'keywords']
  .map(prop => entry[prop].toLowerCase())
  .some(s => s.includes(textLower));

Если, случайно, entry содержит только этих свойств, вы можете использовать Object.values вместо:

return Object.values(entry)
  .map(s => s.toLowerCase())
  .some(s => s.includes(textLower));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...