如何从多深度JavaScript对象中删除空属性?
我有一个JS对象:如何从多深度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"]
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>它应该被删除,如果它是[“某物”,“某物”]
,它应该变成[“某物”]
,对吗?我相应地更新了答案。