这是我的对象数组:
var data = [
{
"label": "HOME",
"href": "web-tutor99.com",
"children": [{}]
},
{
"href": "web-tutor99.com",
"label": "HTML5"
}
];
这是一个多维对象,这里的children属性为空。如何找到这样的空属性并使用jQuery删除它们?
答案 0 :(得分:1)
你可以这样做..
for (var i in data) {
if (test[i].children === null || test[i].children === undefined || test[i].children.length<=0) {
delete test[i].children;
}
}
但是我认为浪费CPU周期循环遍历对象以删除空对象没有实际用途。
不确定你想要实现的目标。但你最好只检查它是否为空,然后不显示它的情况。
答案 1 :(得分:1)
试试这个
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
<Root>
<Element>
...
</Element>
...
</Root>
[binary invalid content]
&#13;
答案 2 :(得分:0)
你可以简单地创建一个循环遍历所有元素的(如果是嵌套的,递归的)函数,并检查它是否有值,如果没有,delete该属性。
在您的示例对象中,您遇到的问题是children
属性到目前为止并非为空 - 它是一个属性,其值为包含一个空对象的数组。根据您的情况,您必须多次运行您的对象,逐步删除空条目(可能会进行一些优化)。
答案 3 :(得分:0)
我认为以下纯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);