从对象中查找和删除空属性

这是我的对象数组:

var data = [ { "label": "HOME", "href": "web-tutor99.com", "children": [{}] }, { "href": "web-tutor99.com", "label": "HTML5" } ]; 

它是一个多维对象,这里的子属性是空的。 如何找到这样的空属性并使用jQuery删除它们?

试试这个

 data = [{ "label": "HOME", "href": "web-tutor99.com", "children": [{}] }, { "href": "web-tutor99.com", "label": "HTML5" }]; alert("Before : "+JSON.stringify(data)); //console.log(data); checkEmptyObj(data); alert("After : "+JSON.stringify(data)); function checkEmptyObj(data) { $.each(data, function(key, value) { if ($.isPlainObject(value) || $.isArray(value)) { checkEmptyObj(value); } //alert(key+":"+$.isEmptyObject(value)); if (value === "" || value === null || $.isEmptyObject(value)) { delete data[key]; } }); } 
  

你可以这样做..

 for (var i in data) { if (test[i].children === null || test[i].children === undefined || test[i].children.length<=0) { delete test[i].children; } } 

但是我认为浪费CPU周期循环遍历对象以删除空对象没有实际用途。

不确定你想要实现的目标。 但你最好只检查它是否为空,然后如果是这样则不显示。

你可以简单地创建一个循环遍历所有元素的(如果是嵌套的,递归的)函数并检查它是否有值,如果没有,则删除该属性。

在您的示例对象中,您遇到的问题是, children属性到目前为止并非为空 – 它是一个包含一个空对象的数组值的属性。 根据您的情况,您必须多次运行对象,逐步删除空条目(可能会进行一些优化)。

最后,您可以使用for …来遍历对象的属性,并使用…来循环遍历对象的/数组的值。

我认为以下纯JS片段负责这项工作。 你可以查看@ JSBin

 var data = [{"label":"HOME","href":"web-tutor99.com","children":[{}]},{"href":"web-tutor99.com","label":"HTML5"}]; function walkJSONObj(obj){ for (var prop in obj) { if (obj[prop].constructor === Array) { //if prop is an array walkJSONArray(obj[prop]); //go walk through the arrays obj[prop].length === 0 && delete obj[prop]; //if on return the array is empty delete it } else typeof obj[prop] === 'undefined' && delete obj[prop]; //delete undefined props } } function walkJSONArray(arr){ for (var l = arr.length-1; l >= 0; l--) { walkJSONObj(arr[l]); // go walk the item objects if (Object.keys(arr[l]).length === 0 && JSON.stringify(arr[l]) === JSON.stringify({})) { arr.splice(l, 1); // if on return the object is empty delete it } } } walkJSONArray(data);