J'essaie de compter le nombre de fois, lorsque des mots spécifiques du tableau B sont apparus dans le tableau A.

J'ai essayé le code ci-dessous, mais la sortie est 0. Je ne comprends pas pourquoi il m'enregistre la valeur que j'ai attribuée à la variable au début de la fonction et n'exécute pas le cycle 'for'.

let A = ['really', 'basically', 'After', 'a','quick', 'popular', 'really', 'Red', 'began', 'very'];
let B = ['really', 'very'];

let number = () => {
  let count = 0;
  for (let i=0; i < A.lengths; i++) {
    if (B.includes(A[i])) {
      return count++;
    }
  }
   return console.log(count);
 }

number();

Je m'attends à ce que le résultat soit 3.

2
smokedsalmon 5 nov. 2019 à 18:44

4 réponses

Meilleure réponse

Vous avez besoin

  • length comme propriété pour la taille du tableau
  • continuer avec la boucle et ne pas revenir tôt
  • peut-être retourner le nombre, en renvoyant le résultat de console.log, vous obtenez undefined.

Une bonne idée,

  • est de prendre les deux tableaux comme paramètre pour la fonction,
  • prendre une const déclaration / initialisation car cette variable est une constante,
  • consiste à utiliser une petite lettre de départ pour les variables.
const number = (a, b) => {
        let count = 0;
        for (let i = 0; i < a.length; i++) {
            if (b.includes(a[i])) {
                count++;
            }
        }
        return count;
   };

let array1 = ['really', 'basically', 'After', 'a','quick', 'popular', 'really', 'Red', 'began', 'very'];
let array2 = ['really', 'very'];


console.log(number(array1, array2));
2
Nina Scholz 5 nov. 2019 à 15:48

Vous pouvez ajouter une autre instruction for pour parcourir les éléments de B, puis vérifier si A en [i] est égal à B en [j]. Probablement pas aussi efficace que les autres réponses.

 let A = ['really', 'basically', 'After', 'a', 'quick', 'popular', 'really', 'Red', 'began', 'very'];
 let B = ['really', 'very'];

    let number = () => {
        let count = 0;
        for (let i = 0; i < A.length; i++) {
            for(let j=0; j < B.length; j++){
                if (A[i] == B[j]){
                    count++
                }
            }
        }
        return console.log(count);
    }

    number();
-1
Omi in a hellcat 5 nov. 2019 à 15:50

Pourquoi faites-vous ceci: return count++;?

return est censé sortir de la fonction avec la valeur qui lui est donnée. Lorsque vous écrivez return count++;, il renvoie le nombre et seulement ensuite l'incrémente (en fait, il n'incrémente rien car vous êtes déjà hors de la portée de la fonction à ce stade).

Le return console.log(count) ne fait rien non plus - à part le code qui n'y arrive jamais à moins qu'aucun mot ne soit trouvé en B, cela retournera la valeur de retour de console.log qui n'est pas définie.

Faites ceci:

let number = () => {
  let count = 0;
  for (let i=0; i < A.length; i++) {
    if (B.includes(A[i])) {
      count++;
    }
  }
   console.log(count);
   return count;
 }
0
Gibor 5 nov. 2019 à 15:54

Vous pouvez également utiliser des fonctions d'ordre supérieur comme réduire et filtre à la place boucle.

let A = ['really', 'basically', 'After', 'a','quick', 'popular', 'really', 'Red', 'began', 'very'];
let B = ['really', 'very'];

let total = B.reduce(function(accumulator, currentValue){

    let founds = A.filter(function(value,index){
        return value == currentValue;
    }).length;

    return accumulator + founds;

},0);


console.log(total);
0
Sandip Patel 6 nov. 2019 à 17:16