【问题标题】:Javascript includes particular caseJavascript 包括特殊情况
【发布时间】:2021-04-04 00:44:42
【问题描述】:

在我的情况下,我必须只保留包含“eat”的标题(或字符串),因此“eating”也可以,问题来自“cheat”,因为它包含“eat”但是它通常会脱离上下文标题,同时我应该保留“作弊餐”这个词。

如果不是因为“作弊”这个词本身,我可以选择 if.includes("eat") || .includes("cheat meal"),我会完成它。但不幸的是,“作弊”之后也没有“用餐”,所以在这种情况下,如果在没有“用餐”的情况下使用“作弊”或“作弊”,我该如何排除?

我可以做一个丑陋的 if 语句链,但我很确定我错过了一些可以更优雅地解决问题的高级 includes js 方法变体

编辑示例

“我今天吃什么”//接受

“我是如何作弊的……” // 排除

“我的饮食习惯是什么”//接受

“本周最佳作弊餐” // 接受

“年度最佳欺骗餐” // 接受

EDIT2 完整迭代(带解决方案)

     let vid = [], vidEat = [];
     for(let j=0; j < vidData.items.length; j++){
          if (vidData.items[j] != undefined){
            vid.push(vidData.items[j].snippet.resourceId.videoId)

            if (/\beat|\bmeal/i.test(vidData.items[j].snippet.title)){
              vidEat.push(vidData.items[j].snippet.resourceId.videoId)
            }
          }
        }

【问题讨论】:

  • 匹配cheat meal背后的逻辑是什么? eatcheat 里面,应该排除在外吧?
  • 不应排除它,因为该字符串也有“meal”,但如果单独发现“cheat”,则应排除它。我将编辑以添加示例

标签: javascript string filter include indexof


【解决方案1】:

您可以使用正则表达式来匹配以eat 开头的单词或以meal 开头的单词:

const probablyRelatedTitles = titles.filter(
  title => /\beat|\bmeal/i.test(title)
);

【讨论】:

  • 很好,所以我想建议在这些情况下使用 .filter 而不是包含。 \b 表示以和 | 开头相当于js || . possibleRelatedTitles 返回一个布尔值?
  • 听起来您有一个字符串数组作为输入,因此.filter 将生成一个仅包含通过测试的字符串的数组。正则表达式是在 字符串本身 上执行的,它正在替换 .includes。如果你只有一个字符串要检查,你可以单独做/\beat|\bmeal/i.test(title)
  • 哦,不,我已经在遍历标题,所以我只需要检查当前标题中的“吃”和“餐”,例如:.items[i].sn-p 。标题 。我应该在您建议的正则表达式中使用 .includes 吗?它在节点中工作吗?因为在节点之前直接使用正则表达式之前我遇到了一些问题
  • 虽然您可以执行/\beat|\bmeal/i.test(.items[i].snippet.title) 之类的操作,但首先使用.filter 可能是一种更语义化的方法,具体取决于更广泛的上下文。是的,正则表达式在 Node 中工作
  • 我不知道为什么它也让我得到带有“create”和“retreat”的标题,这两个词都不以“eat”开头,而是包含它。我将用完整的迭代进行编辑
猜你喜欢
  • 1970-01-01
  • 2014-11-03
  • 2016-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-21
  • 1970-01-01
  • 2012-07-13
相关资源
最近更新 更多