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.
4 réponses
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 obtenezundefined
.
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));
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();
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;
}
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);