如何从多深度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/
答
看起来你在这里问2个问题。
- 如何删除对象的属性;和
- 如何判断一个对象是否实际上是一个数组。
您可以使用delete
运算符删除对象的属性。
delete test.cp_cult;
在JavaScript数组是对象,这意味着typeof([])
无助地返回object
。通常情况下,人们通过在框架中使用函数(dojo.isArray
或类似的东西)或者滚动自己的方法来确定对象是否是数组,从而解决这个问题。
没有100%保证的方式来确定对象是否实际上是一个数组。大多数人只是检查,看看是否有一些数组length
,push
,pop
,shift
,unshift
等的方法/属性的
+0
我不想手动删除键:( – younes0 2011-02-23 15:48:44
typeof运算符将不会返回“阵列” – 2011-02-23 15:54:13
对不起,我的错 – pimvdb 2011-02-23 15:56:23
有条件的其他可能性isEmpty函数: (test [i] ==“”|| test [i] === null ||(test [i] && test [i] .join &&!test [i] .join(“”))) – 2011-02-23 16:01:54