如何使用 Set 匹配数组中的单词

How to match words in an array using Set

提问人:József Kiss 提问时间:6/19/2021 最后编辑:AGEJózsef Kiss 更新时间:6/19/2021 访问量:439

问:

我想在包含某些字符的数组中找到单词。但是,如果我尝试使用 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"]

javascript 数组 if-statement

评论

0赞 Brick 6/19/2021
您尚未理解 中的标准。has
0赞 AGE 6/19/2021
此外,您的函数名称意味着完全不同的目的,它与您面临的问题完全不一致
0赞 Pointy 6/19/2021
此外,声明您的变量
0赞 Stephen P 6/19/2021
如果使用调试器单步执行代码,则会看到 for 循环变量肯定是递增的。i

答:

3赞 richarddmorey 6/19/2021 #1

发生这种情况是因为

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

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

0赞 Alumno Cabreado 6/19/2021 #2

我假设你想检查是否有你输入的那个字母之一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));

0赞 Tushar Shahi 6/19/2021 #3

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

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

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

要修复,您必须单独检查与运算符一起使用的多个字符。.has()||

0赞 rpocfemia 6/19/2021 #4

您可以尝试此方法。

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));