从javascript数组中删除空值

时间:2010-01-25 11:59:30

标签: javascript null

我有一个javascript数组。

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(", ");

我必须将所有这些数组值的内容复制到邮政地址textarea。当我使用上面的连接函数时,为空值添加了逗号。如何删除这些额外的逗号?

由于

9 个答案:

答案 0 :(得分:38)

您可以使用filter过滤掉 null 值:

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

答案 1 :(得分:6)

另一种过滤器替代

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

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

答案 2 :(得分:5)

Underscore是一个很好的函数库,用于函数式编程和列表操作:

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

编辑:还有一种更紧凑的方式(感谢Andrew De Andrade!):

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

答案 3 :(得分:3)

使用filter方法删除所有falsy值:

var list = [null, undefined, 0, 1, 2, '', 'test'];

// ES5:
var result = list.filter(Boolean).join(', ');
console.log(result);

// ES6, saves 3 characters:
var result = list.filter(x => x).join(', ');
console.log(result);

答案 4 :(得分:1)

使用以下代码仅删除null值,其简称&简单:

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

如果您要删除null0false& ""(空字符串)之类的值,然后使用:

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

答案 5 :(得分:0)

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

或者应该是

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

...

答案 6 :(得分:0)

也可以使用Array.prototype.reduce()

数组减少为单个值,例如一个字符串。像这样:

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

a保存中间结果, b包含当前元素。

答案 7 :(得分:0)

如果你想消除所有undefined,null,NaN,“”,0,一个简单的方法是使用过滤器回调函数和布尔函数的组合。

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

将值传递给布尔函数时,如果省略该值或者为0,-0,null,false,NaN,undefined或空字符串(“”),则对象的初始值为false 。

以下是此用法的示例:

 function bouncer(arr) {

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

      return filterArr;
    }

以下是一些测试:

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 []

答案 8 :(得分:0)

addresses.filter(Boolean).join(",")