Détecter si le tableau a uniquement des valeurs nulles dans ce
J'ai un tableau et je voudrais un simple non-test de boucle si que les tableaux ne contient que des null
valeurs. Tableau vide également considéré comme ayant uniquement des valeurs nulles.
Je suppose une autre façon de décrire la question est pour tester si le tableau a au moins une valeur non null.
Donc:
Good: [ null, null, null ]
Good: []
Bad: [ null, 3, null ]
- Pourquoi ne pas simplement de la boucle et de tester toutes les valeurs ?
- Très grand et a appelé très souvent. Pourrait correspondre à un mongodb db dans l'avenir.
!arr.some(function(v) { return v !== null; });
... mais bien sûr que des boucles à un certain niveau. Vous ne pouvez pas comparer des valeurs dans un tableau sans boucle.- ty, poster une réponse pls
- Connexes: stackoverflow.com/questions/34031690/...
Vous devez vous connecter pour publier un commentaire.
La meilleure façon que je peux penser est simple:
JS Fiddle démo.
Cela prend du tableau, joint les éléments de ce tableau d'ensemble (sans arguments
join()
rejoint les éléments du tableau avec,
caractères) pour renvoyer une chaîne de caractères, remplace toutes les,
caractères dans la chaîne (à l'aide d'une expression régulière) avec les cordes à vide, puis les tests si la longueur est égale à0
. Donc:Réunis pour donner:
A tous les virgules remplacé (à l'aide de la
g
drapeau après l'expression régulière), pour donner:Testé pour voir si sa longueur est égale à
0
, pour donner:Il est intéressant de noter qu'il y a le problème de l', potentiellement, la
,
mettant en vedette dans les bagages des tableaux.Aussi, Felix Kling répondre est un peu plus rapide.
replace(/,/g,'')
est en train de faire? spécialement/,/g
partie.,
caractère où, comme leg
de caractères spécifie à la recherche pour TOUS (global) des cas, et pas seulement le premier. Il remplace toutes les instances de,
avec " qui n'est rien.for-in
pour itérer sur tableau et tout d'un coup, de nouvelles énumérableisNull
propriété se lève.for-in
, sur un tableau.[",,"]
et similaires...[','].isNull() === true
), b) inutilement compliqué, c), largement considéré comme une mauvaise pratique. Désormais, il est encore acceptée. Je souhaite que je pourrais downvote plus.Array.prototype
? Si oui, c'est absurde. Il peut être une mauvaise pratique lors de la conception d'un public bibliothèque de code (au moins sans documentation claire sur le fait), mais au-delà, ce n'est ni bon ni mauvais. C'est juste une approche à un problème.[1,2,3].join()
produit"1,2,3"
mais[1,2,3].join('')
produit"123"
.Vous pouvez éviter d'utiliser un explicite boucle à l'aide de
Array#tous
:mais bien sûr, en interne, le moteur sera toujours effectuer une itération sur le tableau. Itération sur le tableau explicitement pourrait en fait être plus rapide. La chose importante à faire est de pause hors de la boucle une fois que vous rencontrez un élément qui n'est pas
null
(la méthode ne fait que).Cette méthode n'est pas pris en charge dans tous les navigateurs, voir le lien pour un polyfill.
var all_null = !_.some(arr);
every
(plus facile à comprendre et fonctionne de la même), mais oui!Sortie
Edit 1: Et voici la solution la plus efficace (suggéré par user2736012). Cette solution s'applique BAISER principe. K eep je t S imple, S illy.
Résultat De Performance: http://jsperf.com/so-q-19337761/6
for
boucle est étrange, et comme un résultatisNull()
retournetrue
pour[3]
(violon).!_.some()
(qui, j'imagine, a été mise en œuvre de la même manière 🙂for
etif
déclaration. jsfiddle.net/wG9sR