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



我想在数组中查找包含特定字符的单词。然而,如果我试图用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"]

发生这种情况是因为

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

等于CCD_ 3;k〃;在字符串中。(试着重新排列字母(。我想您想检查它们中是否有任何一个在数组中;你需要做一些像set.has("k") || set.has("m")

我假设您想检查set.has("k" || "m" || "v" || "w" || "x")中是否有这样的字母

为此,您可以像这样直接使用regex:

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

在这种情况下,不能执行类似set.has("k" || "m" || "v" || "w" || "x")的操作。它运行时没有出现错误,但不会产生预期的结果。||OR运算符,将返回第一个真值。CCD_ 10评估为"0";x〃;。它甚至要到";y";,因为在JS"中;x〃;是一种真实的价值观。所有字符串都是。

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

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

要修复此问题,您必须使用.has()||运算符分别检查多个字符。

您可以尝试这种方法。

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

最新更新