1
votes

Existe-t-il un moyen de clarifier les déclarations vraies et fausses dans ce JS?

J'ai travaillé sur l'apprentissage de JS et je n'arrive pas à comprendre pourquoi mes valeurs booléennes reviennent toujours vraies ou toujours fausses.

Je crois donc que je comprends les bases de la situation véridique / falsifiée dans JS, mais je n'arrive pas à faire les choses correctement. Je sais qu'il y a des problèmes de type de données (impossible de faire faire des choses différentes à différents types de données).

function lastCharacter(char1, char2) {
  if (char1[-1] === char2[-1]) {
    return true;
  } else {
    return false;
  }
}

console.log(lastCharacter('apple', 'pumpkina'));

Ou

function lastCharacter(char1, char2) {
  if (char1[-1] === '' && char2[-1] === '') {
    return true;
  } else {
    return false;
  }
}

console.log(lastCharacter('apple', 'pumpkine'));

Définissez une fonction lastCharacter qui accepte deux chaînes comme arguments. lastCharacter doit renvoyer true si les deux chaînes se terminent par le même caractère. Sinon, lastCharacter doit renvoyer false.

Ils retournent toujours vrai ou toujours faux. Quelqu'un peut-il m'aider?


3 commentaires

char1 [-1] est toujours indéfini ; il ne vous donne pas le dernier caractère de la chaîne, en particulier.


... un de ces pièges quand on vient de python


console.log (char1 [-1], char2 [-1]) Qu'attendez-vous qu'il retourne? Le dernier personnage?


4 Réponses :


4
votes

Vous avez besoin d'une méthode différente pour obtenir le dernier caractère d'une chaîne, de préférence avec String # slice et une valeur négative pour obtenir la dernière. Ensuite, comparez et renvoyez le résultat.

var x = '';

console.log('#' + x.slice(-1) + '#');
console.log('#' + x[x.length -1] + '#');

Une comparaison entre la prise du dernier caractère d'une chaîne vide en utilisant un index -1 qui renvoie undefined et slice , qui renvoie une chaîne vide.

function lastCharacter(string1, string2) {
    return string1.slice(-1) === string2.slice(-1);
}

console.log(lastCharacter('apple', 'pumpkine'));


1 commentaires

string [string.length - 1] enregistre un appel de fonction :) edit oups sauf qu'il est indéfini pour les chaînes vides !!



3
votes

Vous pouvez utiliser la tranche

function lastCharacter(char1, char2) {
  return char1[char1.length-1] === char2[char2.length-1]
}

console.log(lastCharacter('apple', 'pumpkina'));
console.log(lastCharacter('apple', 'snake'));

Ou vous pouvez simplement accéder au dernier index

function lastCharacter(char1, char2) {
  return char1.slice(-1) === char2.slice(-1)
}

console.log(lastCharacter('apple', 'pumpkina'));
console.log(lastCharacter('apple', 'snake'));


0 commentaires

0
votes

Il n'y a pas d'index de tableau négatif en JavaScript, au lieu de char1 [-1] , vous devez utiliser char1 [char1.length - 1] .

Accès l'un des caractères d'une chaîne (par exemple "abc [1] ) aura toujours une longueur de 1, il ne sera jamais égal à " ". Votre deuxième fonction a plus de sens .

Aussi

 return condition;

est égal à

 if(condition) { return true; } else { return false; }


3 commentaires

"Un caractère de chaîne aura toujours une longueur de 1, il ne sera jamais égal à" "." o_O


@ninaScholz "abc" [1] ? (oui ou indéfini )


@NinaScholz Je pense qu'il veut dire "une chaîne qui est le résultat de l'utilisation d'une indexation de tableau valide sur une chaîne plus longue", donc "bonjour" [1] fait toujours 1 caractère.



0
votes

La notation [-1] ne signifie pas implicitement "un caractère à partir de la fin de la chaîne" en JavaScript. Vous pouvez utiliser str [str.length - 1] . (Si vous prévoyez d'éventuelles chaînes source vides, vous voudrez également vérifier cela pour éviter de vous retrouver avec exactement le même problème.)

Au lieu d'un if / else qui renvoie soit true ou false , renvoyez simplement les résultats de l'expression logique:

    return !!(expression);

Les deux === code> les comparaisons renvoient de toute façon true ou false , donc la valeur globale de l'expression doit être l'une de celles-ci. En général, cependant, si vous voulez être absolument sûr que vous vous retrouvez avec un booléen, vous pouvez préfixer une expression avec !! pour forcer l'évaluation standard JavaScript "true-falsy":

XXX


0 commentaires