提问人:József Kiss 提问时间:6/19/2021 最后编辑:AGEJózsef Kiss 更新时间:6/19/2021 访问量:439
如何使用 Set 匹配数组中的单词
How to match words in an array using 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"
等于 所以它只检查“k”是否在字符串中。(尝试重新排列字母)。我假设您想检查它们中的任何一个是否在数组中;你需要做一些类似的事情。"k"
set.has("k") || set.has("m")
我假设你想检查是否有你输入的那个字母之一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));
在这种情况下,您不能做这样的事情。它正在运行,没有错误,但不会导致预期的结果。 是运算符,ill 返回第一个 true 值。 计算结果为“x”。它甚至不会一直到“y”,因为在 JS 中,“x”是一个真值。所有字符串都是。set.has("k" || "m" || "v" || "w" || "x")
||
OR
"x" || "y"
为了进一步理解,请尝试将代码替换为 ,您将看到所有字符串都匹配。set.has("k" && "v" && "g" )
g
&& 是 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));
下一个:为什么 x 成员变量不明确?
评论
has
i