从javascript数组中删除空值

Kri*_*iya 23 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(", ");
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Gum*_*mbo 39

您可以filter用来过滤掉值:

addresses.filter(function(val) { return val !== null; }).join(", ")
Run Code Online (Sandbox Code Playgroud)


Dav*_*own 6

另一种过滤器

myArray.filter(function(val){if(val)return val}).join(", ")
Run Code Online (Sandbox Code Playgroud)

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


Val*_*tin 6

使用filter方法删除所有虚假值:

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);
Run Code Online (Sandbox Code Playgroud)

  • `filter(Boolean)` 会删除所有的假值,所以如果你想保留 `0`,你必须将它作为 `'0'` 传递。 (3认同)

Vic*_*tor 5

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

_.filter(addresses, function(val) { return val !== null; }).join(", ");
Run Code Online (Sandbox Code Playgroud)

编辑:还有一个更紧凑的方式(谢谢安德鲁德安德拉德!):

_.compact(addresses).join(", ");
Run Code Online (Sandbox Code Playgroud)


Vic*_*tor 0

document.client.cli_PostalAddress.value = 
    document.client.cli_PostalAddress.value.replace(/(, )+/g,", ");
Run Code Online (Sandbox Code Playgroud)

或者应该是

document.client.cli_PostalAddress.value = 
    document.client.cli_PostalAddress.value
    .replace(/(null, )/g,"").replace(/(, null)/g,"");
Run Code Online (Sandbox Code Playgroud)

??