从javascript数组中删除空值
我有一个javascript数组从javascript数组中删除空值,javascript,null,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.c
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。当我使用上述连接函数时,为空值添加了逗号。如何删除这个额外的逗号
谢谢
还是应该如此
document.client.cli_PostalAddress.value =
document.client.cli_PostalAddress.value
.replace(/(null, )/g,"").replace(/(, null)/g,"");
?您可以使用过滤掉空值:
是一个很好的实用程序库,用于函数编程和列表操作:
_.filter(addresses, function(val) { return val !== null; }).join(", ");
编辑:还有一种更简洁的方式(谢谢安德鲁·德·安德拉德!)
另一种过滤器替代方案
myArray.filter(function(val){if(val)return val}).join(", ")
document.write(['this','',,'is','a',,'test'])。filter(函数(val){if(val)return val})。join(“,”)代码>也可以使用
它将数组缩减为单个值,例如字符串。像这样:
addresses.reduce(function (a, b) {
if (a && b) { return a + ', ' + b; }
if (a) { return a; }
return b;
}, '');
a
保存中间结果,
b
保存当前元素。如果要消除所有未定义的、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 []
仅使用以下代码删除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(', ');
addresses.filter(Boolean).join(“,”)使用方法删除所有值:
var list=[null,未定义,0,1,2','test'];
//ES5:
var result=list.filter(布尔).join(',');
控制台日志(结果);
//ES6,保存3个字符:
var result=list.filter(x=>x.join(',');
控制台日志(结果)代码>添加一个“g”来进行多个搜索和替换。此代码非常有效。感谢您的快速回复。document.client.cli_PostalAddress.value=document.client.cli_PostalAddress.value.replace(/(,)+/g,“,”);但是我在地址的末尾添加了一个逗号/*删除空值*/document.client.cli_PostalAddress.value=document.client.cli_PostalAddress.value.replace(/(,)+/g,“,”);/*删除最后一个逗号*/document.client.cli_PostalAddress.value=document.client.cli_PostalAddress.value.slice(0,-2)/*删除第一个逗号*/document.client.cli_PostalAddress.value=document.client.cli_PostalAddress.value.substr(1);我使用了这些代码,现在工作很好。非常感谢您的帮助,这样比后期处理加入的数组元素更好。每个javascript中都有过滤器吗?我认为某些IE中没有用于记录的内容,我也更喜欢:),并会在下划线的帮助下这样做。jsI认为您是对的,筛选器在所有IE版本中都不可用。@Victor:请参阅我之前的评论。wk.compact()执行一个删除伪值的筛选器:filter(Boolean)
删除所有伪值,因此,如果要保持0
,必须将其作为'0'
传递。
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 []
addresses = addresses.filter(n => (n===null) ? false : true).join(', ');
document.client.cli_PostalAddress.value = addresses;
document.client.cli_PostalAddress.value = addresses.filter(Boolean).join(', ');