Проверка, содержит ли массив какие-либо специальные символы

#javascript #arrays #array-formulas

#javascript #массивы #массив-формулы

Вопрос:

Я пытаюсь проверить, содержит ли строка пароля какие-либо специальные символы.
Я пытаюсь реализовать это с помощью следующего кода:

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

Однако hasSpecLet возвращает false .

Ответ №1:

Вам не хватает return инструкции в функции, которую вы передаете some() :

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

Или просто используйте более короткую версию (без фигурных скобок):

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

Смотрите MDN

Комментарии:

1. ага, понятно — спасибо. Означает ли это, что если я собираюсь использовать блок возврата, у меня должно быть ключевое слово return?

2. @EddieLam, если вы не используете функциональное выражение (то есть однострочное выражение), вам нужно явно return указать значение

Ответ №2:

всякий раз, когда вы используете { } функцию со стрелкой внутри, вы должны использовать return ключевое слово O.W. значения возвращаются по умолчанию.

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

Ответ №3:

Это небольшое изменение заставит его работать —

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

console.log(hasSpecLet)  

Вышеуказанное изменение гарантирует, что значение, обработанное с помощью — specialChar.includes(letter) , будет возвращено и использовано в родительской функции для получения конечного результата.

В вашем случае ни одна из букв не возвращала значение true, и, следовательно, вы получили бы false в каждом случае

Ответ №4:

Используя some() и include()

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

Используя пересечение

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

Ответ №5:

Вам нужно использовать return , поскольку функция arrow использует фигурные скобки:

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

Или выполните следующие действия:

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