Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.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_Object - Fatal编程技术网

如何从多深度JavaScript对象中删除空属性?

如何从多深度JavaScript对象中删除空属性?,javascript,object,Javascript,Object,我有一个JS对象: var test = {"code_operateur":[""],"cp_cult":["",""],"annee":["2011"],"ca_cult":[""]} 当我使用此功能时: for (i in test) { if ( test[i] == "" || test[i] === null ) { delete test[i]; } } 我得到: {"cp_cult":["",""],"annee":["2011"]

我有一个JS对象:

var test = {"code_operateur":[""],"cp_cult":["",""],"annee":["2011"],"ca_cult":[""]}
当我使用此功能时:

for (i in test) {  
   if ( test[i] == "" || test[i] === null ) {  
       delete test[i];  
    }  
}
我得到:

{"cp_cult":["",""],"annee":["2011"]}
好的,不错,但是我想删除空的“cp_cult”属性(它是一个数组,而不是像另一个那样的字符串)


注意:我不想手动删除密钥

看起来你在问两个问题

  • 如何移除对象的属性;及
  • 如何判断一个对象是否实际上是一个数组
  • 可以使用
    delete
    操作符删除对象的属性

    delete test.cp_cult;
    
    JavaScript数组中有对象,这意味着
    typeof([])
    会毫无帮助地返回
    object
    。通常,人们通过在框架中使用函数(
    dojo.isArray
    或类似的东西)或滚动他们自己的方法来确定对象是否是数组来解决这个问题

    没有100%保证的方法来确定对象是否实际上是数组。大多数人只是检查它是否具有数组的某些方法/属性
    length
    push
    pop
    shift
    unshift
    ,等等。

    试试:

    function isEmpty(thingy) {
     for(var k in thingy){
      if(thingy[k]) {
       return false;
      }
     }
     return true;
    }
    
    for(i in test) {
     if ( test[i] == "" || test[i] === null || (typeof test[i] == "object" && isEmpty(test[i])) ) {
      delete test[i];
     }
    }
    
    但是,根据对象的复杂性,您需要更高级的算法。例如,如果该数组可以包含另一个空字符串数组(甚至更多级别),并且应该将其删除,则还需要检查该数组


    编辑:为了满足您的需要,请看一看:

    如果没有isEmpty函数,typeof运算符将永远不会返回“array”条件的其他可能性:(test[i]=“”| | | test[i]===null | | |(test[i]&&test[i]。join&!test[i]。join(“”))Primvdb:还有一些需要改进的地方:我仍然可以得到我想避免的是:{cp_cult:[“25”,“25”,“annee:[“2011”]}。它必须是:{cp_cult:[“25”,“annee:[“2011”]}有什么想法吗?如果
    cp_cult
    [,,][/code>它应该被删除,如果它是
    [“某物”,“某物”]
    ,它应该变成
    [“某物”]
    ,对吗?我相应地更新了答案。