2013-01-15 118 views
6

我有一个树形对象如下,我试图删除items数组属性,如果它是空的。我不确定最好的方法来做到这一点?什么是从嵌套的JavaScript对象中删除属性的最佳方法?

我正在考虑通过密钥循环,检查属性,然后删除使用delete myJSONObject[prop] ...任何想法/想法都欢迎?

[{ 
    text: "TreeRoot", 
    items: [{ 
     text: "Subgroup1", 
     items: [] 
    }, { 
     text: "Subgroup2", 
     items: [] 
    }, { 
     text: "Subgroup3", 
     items: [], 
     items: [{ 
      text: "subgroup5", 
      items: [{ 
       text: "subgroup6", 
       items: [{ 
        text: "subgroup7", 
        items: [{ 
         text: "subgroup8", 
         items: [] 
        }] 
       }] 
      }] 
     }] 
    }] 
}] 
+0

我会卜创建一个新对象,而不是试图修改这个对象。 –

+0

嘿,你解决了这个吗? – Gideon

+0

http://stackoverflow.com/questions/9446426/how-do-you-recursively-remove-nested-objects-that-c​​ontain-an-empty-array – J4S0Nc

回答

1

可以具有递归算法,在每一步会删除items阵列和回报,或递归地处理所述阵列的每个单独的对象。

我也会尝试在服务器端做到这一点。它会节省很多复杂性,内存和处理时间。通常有从JSON编码的字符串中“排除”空数组的方法。

1

这应该做的工作(ES5):在ES6

function removeEmpty(obj) { 
    Object.keys(obj).forEach(function(key) { 
    (key === 'items' && obj[key].length === 0) && delete obj[key] || 
    (obj[key] && typeof obj[key] === 'object') && removeEmpty(obj[key]) 
    }); 
    return obj; 
}; 

JSBIN

一样:

const removeEmpty = (obj) => { 
    Object.keys(obj).forEach(key => 
    (key === 'items' && obj[key].length === 0) && delete obj[key] || 
    (obj[key] && typeof obj[key] === 'object') && removeEmpty(obj[key]) 
); 
    return obj; 
}; 

JSBIN

相关问题