我有一个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。当我使用上面的连接函数时,为空值添加了逗号。如何删除这些额外的逗号?
由于
答案 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)
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;
如果您要删除null
,0
,false
& ""
(空字符串)之类的值,然后使用:
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(",")