【问题标题】:How to match words in an array using Set如何使用 Set 匹配数组中的单词
【发布时间】:2021-09-03 10:24:45
【问题描述】:

我想在包含某些字符的数组中查找单词。但是,如果我尝试使用 for 循环找到它们,它只会迭代一次。它应该给我下面数组中的第一项和最后一项。

arr = ["knighthood", "parental", "fridge", "clingfilm"]

function longest7SegmentWord(arr) {
  newarr = []
  for (i = 0; i < arr.length; i++) {
    set = new Set(arr[i].split(""))
    if (set.has("k" || "m" || "v" || "w" || "x") == true) {
      newarr.push(arr[i])
    }
  }
  return newarr
}

let result = longest7SegmentWord(arr)
console.log(result)

但代码只返回一个包含一个元素的数组。
["knighthood"]

【问题讨论】:

  • 你还没有理解has中的条件。
  • 您的函数名称也暗示了一个完全不同的目的,它与您面临的问题完全不符
  • 另外,声明你的变量
  • 如果您使用调试器单步执行代码,您会看到 for 循环变量 i肯定递增。

标签: javascript arrays if-statement set


【解决方案1】:

你可以试试这个方法。

var arr = ["knighthood", "parental", "fridge", "clingfilm"];

function longest7SegmentWord(arr) {
    return arr.filter(x=>{
        return x.includes("k") || x.includes("m") || x.includes("v") || x.includes("W") || x.includes("x")
    })
}

console.log(longest7SegmentWord(arr));

【讨论】:

    【解决方案2】:

    在这种情况下,您不能像 set.has("k" || "m" || "v" || "w" || "x") 那样做。它运行没有错误,但不会导致您的预期结果。 ||OR 运算符,将返回第一个真值。 "x" || "y" 计算结果为“x”。它甚至不会到“y”,因为在 JS 中“x”是一个真实的值。所有字符串都是。

    为了进一步理解,尝试将您的代码替换为set.has("k" &amp;&amp; "v" &amp;&amp; "g" ),您将看到所有带有g 的字符串都匹配。

    && 是 AND 运算符。它必须检查所有操作数并返回最后一个。

    要解决此问题,您必须使用 .has()|| 运算符单独检查您的多个字符。

    【讨论】:

      【解决方案3】:

      我假设您想检查是否有您在set.has("k" || "m" || "v" || "w" || "x") 中输入的字母之一

      为此,您可以像这样直接使用正则表达式:

      if ((/k|m|v|w|x/).exec(arr[i].split("")) != null)

      arr = ["knighthood", "parental", "fridge", "clingfilm"];
      
      function longest7SegmentWord(arr) {
          newarr = []
          for (let i = 0; i < arr.length; i++) {
              
              if ((/k|m|v|w|x/).exec(arr[i].split("")) != null) { //A nice method is use regex in that case.
                  newarr.push(arr[i]);
              }
          }
          
          return newarr;
      } 
      
      console.log(longest7SegmentWord(arr));

      【讨论】:

        【解决方案4】:

        这是因为

        "k" || "m" || "v" || "w" || "x"

        等于"k",所以它只检查“k”是否在字符串中。 (尝试重新排列字母)。我假设您想检查它们中的任何一个是否在数组中;你需要做类似set.has("k") || set.has("m")等的事情。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多