检查数组是否包含特殊字符

3
我正在尝试检查密码字符串是否包含一些特殊字符。
我正在使用以下代码实现该功能:
const passwordArr = "A1b2c3d4e5!@#".split("");
const specialChar = "~!@#$%^&*_-+=`|(){}[]:;\"'<>,.?/";
const hasSpecLet = passwordArr.some((letter) => {
  specialChar.includes(letter);
});

然而,hasSpecLet返回false

5个回答

2
您在传递给 some() 的函数中缺少 return 语句:
const hasSpecLet = passwordArr.some((letter) => {
  return specialChar.includes(letter);
});

或者只使用更简洁的版本(不带花括号):

const hasSpecLet = passwordArr.some(letter => specialChar.includes(letter));

请参考MDN了解箭头函数。


啊,我明白了 - 谢谢。这是否意味着如果我要使用返回块,我必须有一个返回关键字? - Eddie Lam
@EddieLam,如果你没有使用函数表达式(即一行表达式),你需要明确地return返回值。 - haim770

1

每当你在箭头函数内使用 { } 时,必须使用 return 关键字,否则默认返回值。

const passwordArr = "A1b2c3d4e5!@#".split("");
const specialChar = "~!@#$%^&*_-+=`|(){}[]:;\"'<>,.?/";
const hasSpecLet = passwordArr.some((letter) => {
   return specialChar.includes(letter);
});
console.log(hasSpecLet);


0

由于箭头函数使用花括号,因此您需要使用return

const passwordArr = "A1b2c3d4e5!@#".split("");
const specialChar = "~!@#$%^&*_-+=`|(){}[]:;\"'<>,.?/";
const hasSpecLet = passwordArr.some((letter) => {
  return specialChar.includes(letter);
});
console.log(hasSpecLet);

Or do the following:

const passwordArr = "A1b2c3d4e5!@#".split("");
const specialChar = "~!@#$%^&*_-+=`|(){}[]:;\"'<>,.?/";
const hasSpecLet = passwordArr.some((letter) => 
  specialChar.includes(letter)
);
console.log(hasSpecLet);


0

这个小改变会让它工作 -

const passwordArr = "A1b2c3d4e5!@#".split("");
const specialChar = "~!@#$%^&*_-+=`|(){}[]:;\"'<>,.?/";
const hasSpecLet = passwordArr.some((letter) => 
  specialChar.includes(letter)
);

console.log(hasSpecLet)

以上更改将确保由 - specialChar.includes(letter) 处理的值被返回并用于父函数以给出最终结果。
在您的情况下,没有任何字母返回 true 值,因此在每种情况下您都会得到 false。

0

使用 some() 和 include()

const hasSpecLet  = passwordArr.some((letter) => specialChar.includes(letter))

使用交集

const hasSpecLet = passwordArr.filter(value => specialChar.split('').includes(value)).length !== 0 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接