2010-01-25 18 views
18

Estoy teniendo una matriz de javascript.Eliminar valores nulos de javascript array

addresses = new Array(document.client.cli_Build.value, 
    document.client.cli_Address.value, 
    document.client.cli_City.value, 
    document.client.cli_State.value, 
    document.client.cli_Postcode.value, 
    document.client.cli_Country.value); 
document.client.cli_PostalAddress.value = addresses.join(", "); 

Tengo que copiar el contenido de todos estos valores de matriz a la dirección postal textarea. cuando uso la función de unión anterior, se ha agregado una coma para valores nulos. ¿Cómo eliminar estas comas adicionales?

Gracias

Respuesta

0
document.client.cli_PostalAddress.value = 
    document.client.cli_PostalAddress.value.replace(/(,)+/g,", "); 

o debe ser

document.client.cli_PostalAddress.value = 
    document.client.cli_PostalAddress.value 
    .replace(/(null,)/g,"").replace(/(, null)/g,""); 

??

+0

añadir una "g" para hacer una búsqueda múltiple y reemplazar – Murali

+0

¡Guau, fuiste rápido! :) – Victor

+0

este código funciona como un amuleto. Gracias por su respuesta rápida. document.client.cli_PostalAddress.value = document.client.cli_PostalAddress.value.replace (/ (,) +/g, ","); Pero me da una coma añadida al final de la dirección –

34

Puede utilizar filter para filtrar los nulos valores:

addresses.filter(function(val) { return val !== null; }).join(", ") 
+0

Me gusta esto mejor que el procesamiento posterior de los elementos de matriz unidas. – Murali

+0

¿hay un 'filtro' en cada javascript? Creo que no hay en algunos IE – Victor

+0

Para el registro, me gusta mejor :), y lo haría así con la ayuda de Underscore.js – Victor

5

Underscore es una biblioteca de utilidades agradable para la programación y la lista funcional manipulación:

_.filter(addresses, function(val) { return val !== null; }).join(", "); 

Editar: Y hay una forma más compacta (¡Gracias Andrew De Andrade!):

_.compact(addresses).join(", "); 
+1

_.compact() realiza un filtro que elimina los valores de falsy: http: //documentcloud.github. com/subrayado/# compacto –

6

Otra alternativa filtro

myArray.filter(function(val){if(val)return val}).join(", ") 

document.write(['this','','',,,,'is','a',,,'test'].filter(function(val){if(val)return val}).join(", "));

0

También se podría utilizar Array.prototype.reduce().

Es reduce una matriz a un valor único, p. una cuerda. De este modo:

addresses.reduce(function (a, b) { 
     if (a && b) { return a + ', ' + b; } 
     if (a) { return a; } 
     return b; 
     }, ''); 

a mantiene el resultado intermedio, b sostiene el elemento actual.

0

Si desea eliminar todo lo indefinido, nulo, NaN, "", 0, una forma simple de hacerlo es usar una combinación de función de devolución de llamada de filtro y función booleana.

var filterArr=arr.filter(function(val){ 
    return Boolean(val); 
    }); 

Cuando se pasa un valor a la función booleana, si se omite el valor o es 0, -0,, falso, NaN, o la cadena vacía indefinido vacía (""), el objeto tiene una valor inicial de falso.

Aquí es un ejemplo de este uso:

function bouncer(arr) { 

     var filterArr=arr.filter(function(val){ 
      return Boolean(val); 
      }); 

     return filterArr; 
    } 

Estas son algunas pruebas:

bouncer([1, null, NaN, 2, undefined]);//should return [1, 2] 
bouncer([7, "ate", "", false, 9]);// should return [7, "ate", 9] 
bouncer(["a", "b", "c"]);// should return ["a", "b", "c"] 
bouncer([false, null, 0, NaN, undefined, ""]);//should return [] 
0

Utilice el código siguiente para eliminar únicamente las null valores, su corta & simple:

addresses = addresses.filter(n => (n===null) ? false : true).join(', '); 
document.client.cli_PostalAddress.value = addresses; 

Si quiere eliminar null, 0, false & "" (cadena vacía) como los valores, a continuación, utilizar esto:

document.client.cli_PostalAddress.value = addresses.filter(Boolean).join(', '); 
0

addresses.filter (booleano) .join ("")