2010-08-11 4 views
6

Je dois vérifier si le tableau contient au moins un élément vide. Si l'un des éléments est vide, il retournera false.Comment puis-je vérifier les tableaux JavaScript pour les chaînes vides?

Exemple:

var my_arr = new Array(); 
my_arr[0] = ""; 
my_arr[1] = " hi "; 
my_arr[2] = ""; 

Le 0e et 2 éléments tableau sont "vides".

+0

Que voulez-vous dire par vide? – DuduAlul

+0

Par vide voulez-vous dire «non défini» ou chaînes vides? – Telemachus

+0

var my_arr = new Array(); my_arr [0] = ""; my_arr [1] = "salut"; my_arr [2] = ""; ici les 0ème et 2ème éléments sont vides – Santanu

Répondre

6

Vous devez effectuer une vérification à travers la boucle.

function checkArray(my_arr){ 
    for(var i=0;i<my_arr.length;i++){ 
     if(my_arr[i] === "") 
      return false; 
    } 
    return true; 
} 
+0

fait le tour, merci beaucoup – Santanu

14

Vous pouvez vérifier en boucle à travers le réseau avec un simple for, comme ceci:

function NoneEmpty(arr) { 
    for(var i=0; i<arr.length; i++) { 
    if(arr[i] === "") return false; 
    } 
    return true; 
} 

You can give it a try here, la raison pour laquelle nous ne sommes pas ici en utilisant .indexOf() est le manque de soutien dans IE, sinon ce serait encore plus simple comme ceci:

function NoneEmpty(arr) { 
    return arr.indexOf("") === -1; 
} 

Mais hélas, IE ne supporte pas cette fonction sur les tableaux, du moins pas encore.

+0

N'est-ce pas l'inverse de ce que l'OP a demandé (renvoie vrai si le tableau n'a que des éléments vides, au lieu de retourner false si un élément est vide)? – Telemachus

+0

Bon appel sur l'indexOf pour les tableaux. Maintenant, espérons que quelqu'un de l'équipe de développement IE lira ceci et le réparera! – fredrik

+0

+1 pour le lien jsfiddle – satoru

3

Vous pouvez faire une méthode simple d'aide pour cela:

function hasEmptyValues(ary) { 
    var l = ary.length, 
     i = 0; 

    for (i = 0; i < l; i += 1) { 
     if (!ary[i]) { 
      return false; 
     } 
    } 

    return true; 
} 

//check for empty 
var isEmpty = hasEmptyValues(myArray); 

EDIT: Ce contrôle pour false, undefined, NaN, null, "" et 0.

EDIT2: Mauvaise lecture de l'attente vrai/faux.

..fredrik

+1

Vérifie aussi' undefined', non? – Telemachus

+0

Oui en effet, manqué de ma part. – fredrik

7

Vous pouvez jQuery.inArray() fonction:

return jQuery.inArray("", my_arr) 
+5

Y compris jQuery pour cela semble * juste * un peu exagéré, ne pense pas? –

+0

@Nick Craver - oui, overkill si c'est la seule raison d'utiliser jQuery. D'autre part, lorsque vous utilisez jQuery c'est une bonne solution :-) – gnud

+0

oui cela va aussi faire, merci – Santanu

1

Je vois dans vos commentaires sous la question que l'exemple de code que vous donnez est PHP, donc je me demandais si vous alliez vraiment pour celui PHP ? En PHP, il serait:

function hasEmpty($array) 
{ 
    foreach($array as $bit) 
    { 
    if(empty($bit)) return true; 
    } 

    return false; 
} 

Sinon, si vous avez réellement avez besoin JavaScript, je me réfère à la réponse de Nick Craver

3
function containsEmpty(a) { 
    return [].concat(a).sort().reverse().pop() === ""; 
} 
alert(containsEmpty(['1','','qwerty','100'])); // true 
alert(containsEmpty(['1','2','qwerty','100'])); // false 
1

Il suffit de faire un len(my_arr[i]) == 0; dans une boucle pour vérifier si la chaîne est vide ou non.

0
var containsEmpty = !my_arr.some(function(e){return (!e || 0 === e.length);}); 

Ceci vérifie 0, false, undefined, "" et NaN. C'est aussi un one liner et fonctionne pour IE 9 et plus.

Questions connexes