我得到了这个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”属性(它是一个数组,而不是字符串)。
注意:我不想手动删除密钥!
尝试:
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/
看起来你在问两个问题。
可以使用delete
运算符删除对象的属性。
delete test.cp_cult;
在JavaScript中,数组是对象,这意味着typeof([])
返回的是object
。 通常,人们通过使用框架中的函数(dojo.isArray
或类似的东西)或滚动自己的方法来解决这个问题,该方法确定对象是否为数组。
没有100%保证的方法来确定一个对象是否实际上是一个数组。 大多数人只是检查它是否具有数组的一些方法/属性length
,push
,pop
,shift
,unshift
等。