2010-08-11 12 views
6

Necesito comprobar si la matriz contiene al menos un elemento vacío. Si alguno de los elementos está vacío, devolverá falso.¿Cómo puedo verificar las matrices de JavaScript para cadenas vacías?

Ejemplo:

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

El 0 ª y segundo elementos de matriz son "vacío".

+0

¿Qué quieres decir con vacío? – DuduAlul

+0

¿Por vacío quiere decir 'indefinido' o cadenas vacías? – Telemachus

+0

var my_arr = new Array(); my_arr [0] = ""; my_arr [1] = "hola"; my_arr [2] = ""; aquí el 0 ° y 2 ° elemento está vacío – Santanu

Respuesta

6

Usted tiene que comprobar a través del bucle.

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

hizo el truco, muchas gracias – Santanu

14

Usted puede comprobar haciendo un bucle a través de la matriz con un simple for, así:

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 razón por la que no estamos utilizando .indexOf() aquí es la falta de apoyo en el IE, de lo contrario, sería aún más simple como esto:

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

Pero, por desgracia, IE no soporta esta función en las matrices, al menos no todavía.

+0

¿No es esto lo contrario de lo que solicitó OP (devuelve verdadero si la matriz tiene solo elementos vacíos, en lugar de devuelve falso si algún elemento está vacío)? – Telemachus

+0

Buena llamada en el indexOf para array. ¡Ahora solo esperemos que alguien del equipo de desarrollo de IE lea esto y lo solucione! – fredrik

+0

+1 para el enlace jsfiddle – satoru

3

que podría hacer un simple método de ayuda para esto:

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: Esto comprueba false, undefined, NaN, null, "" y 0.

EDIT2: Error al leer la expectativa de verdadero/falso.

..fredrik

+1

También verifica' undefined', ¿no? – Telemachus

+0

Sí, de verdad, señorita de mi parte. – fredrik

7

Usted puede intentar jQuery.inArray() función:

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

Incluir jQuery para esto parece * solo * un poco exagerado, ¿no crees? –

+0

@Nick Craver: sí, overkill si esta es la única razón para usar jQuery. Por otro lado, al usar jQuery esta es una buena solución :-) – gnud

+0

sí, esto también lo hará, gracias – Santanu

1

que veo en sus comentarios debajo de la pregunta que el ejemplo de código que das es PHP, así que me preguntaba si eran en realidad va para el PHP ? En PHP sería:

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

    return false; 
} 

De lo contrario, si en realidad no necesita tener Javascript, me refiero a la respuesta 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

Sólo hacer una len(my_arr[i]) == 0; dentro de un bucle para comprobar si la cadena está vacía o no.

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

Esto comprueba 0, falso, indefinido, "" y NaN. También es un trazador de líneas y funciona para IE 9 y superior.

Cuestiones relacionadas