Javascript: Comment effacer une valeur non définie à partir d'un tableau
Je suis en train de parcourir un tableau et de les supprimer et d'ignorer les éléments jusqu'à ce que un seul est existant. j'ai essayé d'épissage, mais il bousille ma boucle parce que l'élément de arr[1] devient alors arr[0] etc.
Disons qu'il y a 10 personnes. Je voudrais supprimer la personne 1 puis garder la personne au 2 puis retirez personne 3 et de garder la personne 4. Cette tendance va aller sur jusqu'à ce que l'on est à gauche.
de l'aide ne pourra le faire.
Que voulez-vous dire "jusqu'à ce que l'on est" de gauche"? Après un passage dans le tableau que vous aurez coupé à partir de 10 à 5 éléments (personnes) - vous dites que vous voulez continuez à répéter ce processus (avec plusieurs passes) jusqu'à ce que le tableau n'a qu'un seul élément?
Si vous voulez un seul élément... Alors pourquoi avez-vous besoin d'une boucle?
c'était ma façon de penser ainsi, la position de l'élément restant peut être calculé sans la nécessité pour le bouclage.
Oui, je vais répéter le processus jusqu'à ce qu'il y a un seul de gauche.
Si vous voulez un seul élément... Alors pourquoi avez-vous besoin d'une boucle?
c'était ma façon de penser ainsi, la position de l'élément restant peut être calculé sans la nécessité pour le bouclage.
Oui, je vais répéter le processus jusqu'à ce qu'il y a un seul de gauche.
OriginalL'auteur KT. | 2012-03-07
Vous devez vous connecter pour publier un commentaire.
vous ne devez pas modifier la collection au cours de l'itération, et pas seulement en JavaScript mais toutes les langues, de définir un nouveau tableau et ajouter ceux que vous souhaitez supprimer, et de réitérer que l'on plus tard pour supprimer à partir de la première.
Que diriez-vous à ceux que vous voulez pour le deuxième tableau, puis à la fin de remplacer le premier tableau avec la seconde? Évite d'avoir à parcourir une seconde fois.
Mon opinion est juste, nous devrions essayer de garder notre code simple et facile à lire, mon opportunisme vient de me dire que la rédaction d'un étrange complexe de la boucle ne peut qu'apporter de bugs et de confondre les autres
J'ai mal lu, Simon à la suggestion de la bonne manière de le faire est ce que nnnnnn suggéré (en vertu de cette réponse), le copier sur un nouveau tableau
J'ai fini à l'aide de 3 tableaux, d'abord comme l'original qui est à la base de la boucle. à l'intérieur de la boucle 2 tableaux sont utilisés. le deuxième tableau contient ceux qui sont ignorés dans cette itération et l'autre est un tableau vide. à la fin de chaque itération, je le fais.
arr1 = arr2;
arr2 = arr3;
Je ne suis pas sûr si c'est la meilleure solution, mais il avait un sens comme ce que Simon a dit à la rendre plus simple et cela a fonctionné.OriginalL'auteur Simon Wang
Filtre de la falsy éléments:
Meilleure que j'ai vu jusqu'à présent. J'ai l'habitude de vérifier contre undefineds ou vrai
alexoviedo999 Wow! Merci!
OriginalL'auteur alexoviedo999
Lorsque vous épissure, juste décrémenter votre indice de boucle.
Il y avait beaucoup de bonnes suggestions, je vais poster le code pour les différentes options et vous pouvez décider de les utiliser
Décrément de l'index lors de l'épissage
http://jsfiddle.net/mendesjuan/aFvVh/
Boucle vers l'arrière http://jsfiddle.net/mendesjuan/aFvVh/1/
Copier à nouveau tableau http://jsfiddle.net/mendesjuan/aFvVh/2/
Utiliser le filtre qui est juste une façon élégante de créer un nouveau tableau
À la fin de tous ces exemples, arr [1,2,3,4]
Performance
IE 11, FF et Chrome acceptez que
Array.splice
est le plus rapide. 10 fois (Chrome), 20 fois (IE 11) aussi vite queArray.filter.
à Mettre des objets dans un nouveau tableau a également été lente comparativement àArray.slice
. Voirhttp://jsperf.com/clean-undefined-values-from-array2
Je suis vraiment surpris de voir IE en tête du peloton ici, et pour voir Chrome derrière FF et IE. Je ne pense pas que j'ai jamais couru un test avec ce résultat.
OriginalL'auteur Juan Mendes
Boucle en arrière. (Suppression d'éléments aura donc pas d'incidence sur les indices des éléments qui n'ont pas encore été traités.)
OriginalL'auteur nnnnnn
Si par hasard, vous êtes à l'aide de CoffeeScript puis retirez pas défini à partir de la Matrice de faire ce
OriginalL'auteur equivalent8
Étonnamment, personne n'a répondu au mieux et de façon correcte:
certains de crédit va à @nnnnnn commentaire
OriginalL'auteur
Pas de collecte exactement ce que vous essayez d'atteindre, mais j'ai l'impression que vous êtes en s'appuyant sur la position de l'index d'un élément dans le tableau de continuer avec votre programme. Je voudrais, dans ce cas suggèrent un hachage de tableau, c'est à dire, une Touche de<>Valeur de la paire de tableau.
Dans ce cas,
arr["2"]
toujours des points à l'élément que vous aviez placé dans l'origine. Vous pouvez donc logiquement/numériquement en boucle, tandis que ne pas se soucier des changements de position.Méfiez-vous de la Conversion des types de risques et les pièges!
OriginalL'auteur bPratik
Votre meilleur pari est de créer un double du tableau, puis d'épissage de l'original.
Ou tout simplement aller à l'aide d'une collection (clé->valeur) et il suffit de supprimer la clé par exemple
Vous pouvez remplacer a,b,c avec les numéros de simplement l'utiliser comme un exemple,
Mendes, Mieux l'aide de la touche->valeur les collections de la place alors
Ce n'est pas vrai, il y a beaucoup de bonnes suggestions ici
OriginalL'auteur DdD
ceci est un exemple pour vous
.sort()
méthode n'est pas de faire ce que le commentaire dit qu'il est. Sans une fonction de rappel, il va faire un croissant tri lexicographique.merci pour votre rappel.
OriginalL'auteur shenhengbin
Cela peut ne pas être ce que vous voulez, mais vous pouvez facilement calculer ce que l'élément final à la fin de cette procédure seront, ensuite, il suffit de le saisir. En supposant que les éléments de la matrice sont contigus et de commencer à arr[0], vous pouvez trouver:
En gros, si vous prenez la puissance entière de 2 inférieure ou égale au nombre d'éléments de votre tableau, c'est la position de l'élément qui restera après tout de la boucle et la suppression.
OriginalL'auteur Cameron
EDIT: j'ai écrit cela, basée sur le titre. Ressemble à la question demande quelque chose de complètement différent.
Je pense que vous vouliez dire
.splice(i, 1)
J'ai corrigé ça.
OriginalL'auteur trumank
OriginalL'auteur Vishal
length
est une propriété de la matrice, pas une fonction.merci. c'était une faute de frappe
OriginalL'auteur avgusti