0
votes

Supprimer des chiffres ci-dessous un certain nombre dans un tableau

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());


3 commentaires

L'effet que vous voyez est due au fait que la longueur de la matrice change lorsque vous épissez une valeur. Après l'épissure, arr [i] est la valeur suivante que vous devrait 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.


5 Réponses :


1
votes

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>

var newarray = array.filter (élément => élément> 20) code > p>

check . Filtre () p>

p>

var array =  [1, 7, 2, 3, 90, 4, 70, 20];
array = array.filter(item => item > 20)
console.log(array)


0 commentaires

1
votes

Vous pouvez utiliser array.filter () code>

p>

var arr = [1, 7, 2, 3, 90, 4, 70, 20] 

var filteredArr = arr.filter(item => item > 20);

console.log(filteredArr);


0 commentaires

4
votes

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 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.

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>

const arr = [1, 7, 2, 3, 90, 4, 70, 20]
const newArr = arr.filter(element => element >= 20);

console.log(newArr)


1 commentaires

Merci beaucoup pour cela, c'est bien plus clair maintenant.



1
votes

Vous pouvez itérer à partir de la fin et omettre indexof code>, car vous avez déjà l'index i code>.

Cette réception de la fin et après l'épissage, le reste Les indices inférieurs restent. P>

p>

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());


0 commentaires

0
votes

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());


0 commentaires