提问者:小点点

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


我得到了这个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”属性(它是一个数组,而不是字符串)。

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


共2个答案

匿名用户

尝试:

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];
 }
}

但是,根据对象的复杂性,您需要更高级的算法。 例如,如果数组可以包含另一个空字符串数组(或者更多级别),并且应该删除它,那么您也需要检查是否存在这种情况。

编辑:尝试制作适合您需要的东西,请查看:http://jsfiddle.net/jvhne/

匿名用户

看起来你在问两个问题。

  1. 如何删除对象的属性; 和
  2. 如何判断对象是否实际上是数组。

可以使用delete运算符删除对象的属性。

delete test.cp_cult;

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

没有100%保证的方法来确定一个对象是否实际上是一个数组。 大多数人只是检查它是否具有数组的一些方法/属性lengthpushpopshiftunshift等。