Aujourd'hui, je suis confronté à un problème vraiment étrange. J'essaie en fait de supprimer des chiffres ci-dessous un certain nombre dans un tableau.
J'ai ce tableau [1, 7, 2, 3, 90, 4, 70, 20] et je veux seulement que les nombres supérieurs à 20! p>
Donc, je devrais avoir cela en sortie: [90, 70] P>
mais j'ai plutôt ce tableau: [7, 3, 90, 70, 20] ??? p>
Voici mon code: p>
p>
function superior() { var arr = [1, 7, 2, 3, 90, 4, 70, 20] for (var i = 0; i < arr.length; i++) { if (arr[i] < 20) { arr.splice(arr.indexOf(arr[i]), 1); } else { break; } } return arr; } console.log(superior());
5 Réponses :
Vous pouvez les filtrer en fonction d'une condition.
et remplacez votre matrice existante avec le filtré. Ou si vous ne voulez pas le remplacer, utilisez une autre variable et affectez la valeur filtrée à cette variable. P>
check . Filtre () p> p> var newarray = array.filter (élément => élément> 20) code > p>
var array = [1, 7, 2, 3, 90, 4, 70, 20];
array = array.filter(item => item > 20)
console.log(array)
Vous pouvez utiliser p> array.filter () code>
var arr = [1, 7, 2, 3, 90, 4, 70, 20]
var filteredArr = arr.filter(item => item > 20);
console.log(filteredArr);
Muting d'un tableau pendant que vous bouleversez à travers elle va toujours être délicate. Si vous réduisez la taille de la matrice, mais ne changez pas plutôt que d'essayer de changer le tableau et la boucle à travers elle Au même moment, je vous recommande de créer un nouveau tableau. Ensuite, vous pouvez faire boucle à travers l'ancien sans entrave: p> p> i code>, vous pouvez finir par interagir avec le mauvais élément de la matrice la prochaine fois par la boucle. En outre, en utilisant
break code> arrêtera la boucle de fonctionner entièrement, puis sautez le reste de la matrice. Vous avez peut-être convenu d'utiliser
continuer code>, mais comme vous êtes sur la dernière ligne de la boucle de toute façon, Continuez n'est pas nécessaire.
const arr = [1, 7, 2, 3, 90, 4, 70, 20]
const newArr = arr.filter(element => element >= 20);
console.log(newArr)
Merci beaucoup pour cela, c'est bien plus clair maintenant.
Vous pouvez itérer à partir de la fin et omettre Cette réception de la fin et après l'épissage, le reste Les indices inférieurs restent. P> p> indexof code>, car vous avez déjà l'index
i code>.
function superior() {
var array = [1, 7, 2, 3, 90, 4, 70, 20],
i = array.length;
while (i--) if (array[i] < 20) array.splice(i, 1);
return array;
}
console.log(superior());
Utilisez une matrice temporaire pour appuyer de nouvelles valeurs.
function superior() { var arr = [1, 7, 2, 3, 90, 4, 70, 20]; temp_arr = []; for (var i = 0; i < arr.length; i++) { if (arr[i] > 20) { temp_arr.push(arr[i]); } } return temp_arr; } console.log(superior());
L'effet que vous voyez est due au fait que la longueur de la matrice change i> lorsque vous épissez une valeur. Après l'épissure,
arr [i] code> est la valeur suivante i> que vous devrait i> examiner, mais parce qu'à la fin de la boucle
i < / code> est incrémenté, la valeur est ignorée.
Votre code est correct, c'est l'autre qui cause un problème. Juste enlever l'autre. Lorsque le premier élément inférieur à 20 est rencontré, il éclate de la boucle.
Merci, c'est cristal clair maintenant.