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

问题描述:

我有这个JS对象:如何从多深度JavaScript对象中删除空属性?

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”属性(这是一个数组,而不是像另一个那样的字符串)。

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

尝试:

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

typeof运算符将不会返回“阵列” – 2011-02-23 15:54:13

+0

对不起,我的错 – pimvdb 2011-02-23 15:56:23

+1

有条件的其他可能性isEmpty函数: (test [i] ==“”|| test [i] === null ||(test [i] && test [i] .join &&!test [i] .join(“”))) – 2011-02-23 16:01:54

看起来你在这里问2个问题。

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

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

delete test.cp_cult; 

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

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

+0

我不想手动删除键:( – younes0 2011-02-23 15:48:44