Je commence tout juste à apprendre Javascript et l'une de nos premières missions était la fonction classique check_if_palindrome. Je ne comprends pas ce qui ne va pas avec mon code.

function palindrome(str1) {
  console.log(str1.split('').reverse().join(''));
  console.log(str1);

  if (str1 == str1.split().reverse().join('')) {
    return (true)
  } else {
    return (false)
  }
}

if (palindrome('wow442421') == true) {
  console.log('YES')
} else {
  console.log('NOPE');
}
2
Vivek 18 mars 2019 à 17:13

2 réponses

Meilleure réponse

Il vous manque le '' dans le deuxième split(). Ne répétez pas le code, il est sujet aux erreurs, vous devez utiliser une variable pour conserver le résultat et le réutiliser si nécessaire :

function palindrome(str1) {
  const reversed = str1.split('').reverse().join('');
  console.log(str1, reversed);

  if (str1 === reversed){
    return true
  } else {
    return false
  }
}

if (palindrome('wow442421') === true) {
  console.log('YES')
} else{
  console.log('NOPE');
}

De plus, puisque str1 === str1.split('').reverse().join('') renvoie déjà un booléen, renvoyez simplement cette valeur, l'instruction if/else n'est pas nécessaire :

function palindrome(str) {
  return str.split('').reverse().join('') === str;
}

if (palindrome('wow442421')) {
  console.log('YES')
} else{
  console.log('NOPE');
}

Et si vous voulez le rendre plus succinct, vous pouvez faire ceci :

const isPalindrome = str => str === [...str].reverse().join('')

console.log(isPalindrome('wow44'));
console.log(isPalindrome('Roma amoR'));
3
jo_va 18 mars 2019 à 14:22

Vous devez utiliser split('') au lieu de split(), split() se divisera à chaque caractère espace, split('') se divisera à chaque caractère, c'est ce que vous voulez :

function palindrome(str1) {
  if (str1 == str1.split('').reverse().join('')) {
    return true;
  } else {
    return false;
  }
}

if (palindrome('wow442421') == true) {
  console.log('YES')
} else {
  console.log('NOPE');

}
0
MrGeek 18 mars 2019 à 14:15