我有这个“树”。
它是一个多维对象。每个“节点”最多包含两个属性,即data
和children
。
以下是一个例子:
{Account: { data: ['stuff'], children: {
share: {data: ['stuff'], children: {
share name: {},
share hold: { data: ['stuff'] }
}},
card: { children: {
card_access: { data: ['stuff'] }
}},
loan: { children: {
loan_name: {}
}}
}}
我需要删除没有data
属性的所有节点,并且没有任何具有data
属性的子节点。
所以,上面的例子将成为:
{Account: { data: ['stuff'], children: {
share: {data: ['stuff'], children: {
share hold: { data: ['stuff'] }
}},
card: { children: {
card_access: { data: ['stuff'] }
}},
}}
在JS中实现这一目标的最简洁方法是什么?
答案 0 :(得分:1)
这就是诀窍:
function trimEmpty(obj) {
for(var o in obj) {
if(typeof obj[o] === 'object') trimEmpty(obj[o]);
if(JSON.stringify(obj[o]) === '{}') delete obj[o];
}
} //trimEmpty
trimEmpty(obj);
<强>段:强>
var obj = {
Account: {
data: ['stuff'],
children: {
share: {
data: ['stuff'],
children: {
share_name: {},
share_hold: {
data: ['stuff']
}
}
},
card: {
children: {
card_access: {
data: ['stuff']
}
}
},
loan: {
children: {
loan_name: {}
}
}
}
}
}
function trimEmpty(obj) {
for(var o in obj) {
if(typeof obj[o] === 'object') trimEmpty(obj[o]);
if(JSON.stringify(obj[o]) === '{}') delete obj[o];
}
} //trimEmpty
trimEmpty(obj);
document.querySelector('pre').innerHTML= JSON.stringify(obj, null, 2);
<pre></pre>