试图缩短冗余的Javascript代码

时间:2018-12-14 07:49:10

标签: javascript ecmascript-6

这是有效的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 :(得分:3)

您可以执行以下操作:

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

return [entry.title, entry.description, entry.keywords].some(s => s.toLowerCase().includes(text));

答案 1 :(得分:1)

您可以改用数组和.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));

答案 2 :(得分:0)

您可以只使用单行返回语句,该语句涉及由entry.descriptionentry.keywordsentry.title组成的数组,然后使用Array.prototype.some()返回布尔值({ {1}} / 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.descriptionentry.keywords(顺序无关紧要)组成,并使用entry.title方法遍历它。根据{{​​3}},Array.prototype.some()

  

.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

希望这对您有所帮助!