Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从javascript数组中删除空值_Javascript_Null - Fatal编程技术网

从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

我有一个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。当我使用上述连接函数时,为空值添加了逗号。如何删除这个额外的逗号

谢谢

还是应该如此

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