[英]Nested Object remove from an array of object when the key value is null
我有一個這樣的對象,它是一個嵌套數組,其中包含標簽和值,並且值可以為空("" 或 null)。 我從后端 API 響應創建了這個對象。
[
{
"label": "United States",
"value": "United States",
"children": [
{
"label": "Texas",
"value": "Texas",
"children": [
{
"label": "Galveston County",
"value": "Galveston County",
"children": [
{
"label": "", // to be removed
"value": "", // to be removed
"children": [
{
"label": "Texas City",
"value": "Texas City"
}
]
}
]
}
]
}
]
},
{
"label": "India",
"value": "India",
"children": [
{
"label": "Karnataka",
"value": "Karnataka",
"children": [
{
"label": "Bengaluru Urban District",
"value": "Bengaluru Urban District",
"children": [
{
"label": "Bengaluru South",
"value": "Bengaluru South",
"children": [
{
"label": "Bengaluru",
"value": "Bengaluru"
}
]
}
]
}
]
},
{
"label": "Meghalaya",
"value": "Meghalaya",
"children": [
{
"label": "South West Garo Hills District",
"value": "South West Garo Hills District",
"children": [
{
"label": "Betasing",
"value": "Betasing",
"children": [
{
"label": "Kebolpara",
"value": "Kebolpara"
}
]
}
]
}
]
},
{
"label": "Andhra Pradesh",
"value": "Andhra Pradesh",
"children": [
{
"label": "Chittoor District",
"value": "Chittoor District",
"children": [
{
"label": "Yerpedu",
"value": "Yerpedu",
"children": [
{
"label": "Tirupati",
"value": "Tirupati"
}
]
}
]
}
]
}
]
}
]
現在在這個嵌套的對象數組中有一個值為“”的對象,我想刪除該對象但保留對象的其余部分。
同樣,值:"" 可以在嵌套對象中的任何位置。
所以更新后的對象應該是這樣的:
[
{
"label": "United States",
"value": "United States",
"children": [
{
"label": "Texas",
"value": "Texas",
"children": [
{
"label": "Galveston County",
"value": "Galveston County",
"children": [
{
"label": "Texas City",
"value": "Texas City"
}
]
}
]
}
]
},
{
"label": "India",
"value": "India",
"children": [
{
"label": "Karnataka",
"value": "Karnataka",
"children": [
{
"label": "Bengaluru Urban District",
"value": "Bengaluru Urban District",
"children": [
{
"label": "Bengaluru South",
"value": "Bengaluru South",
"children": [
{
"label": "Bengaluru",
"value": "Bengaluru"
}
]
}
]
}
]
},
{
"label": "Meghalaya",
"value": "Meghalaya",
"children": [
{
"label": "South West Garo Hills District",
"value": "South West Garo Hills District",
"children": [
{
"label": "Betasing",
"value": "Betasing",
"children": [
{
"label": "Kebolpara",
"value": "Kebolpara"
}
]
}
]
}
]
},
{
"label": "Andhra Pradesh",
"value": "Andhra Pradesh",
"children": [
{
"label": "Chittoor District",
"value": "Chittoor District",
"children": [
{
"label": "Yerpedu",
"value": "Yerpedu",
"children": [
{
"label": "Tirupati",
"value": "Tirupati"
}
]
}
]
}
]
}
]
}
]
可以使用flatMap
得到下一層children
擴展到當前children
數組的效果:
const clean = data => data.flatMap(item => !item.children ? item : item.value && item.label ? {...item, children: clean(item.children) } : clean(item.children) ); const response = [{"label": "United States","value": "United States","children": [{"label": "Texas","value": "Texas","children": [{"label": "Galveston County","value": "Galveston County","children": [{"label": "","value": "","children": [{"label": "Texas City","value": "Texas City"}]}]}]}]},{"label": "India","value": "India","children": [{"label": "Karnataka","value": "Karnataka","children": [{"label": "Bengaluru Urban District","value": "Bengaluru Urban District","children": [{"label": "Bengaluru South","value": "Bengaluru South","children": [{"label": "Bengaluru","value": "Bengaluru"}]}]}]},{"label": "Meghalaya","value": "Meghalaya","children": [{"label": "South West Garo Hills District","value": "South West Garo Hills District","children": [{"label": "Betasing","value": "Betasing","children": [{"label": "Kebolpara","value": "Kebolpara"}]}]}]},{"label": "Andhra Pradesh","value": "Andhra Pradesh","children": [{"label": "Chittoor District","value": "Chittoor District","children": [{"label": "Yerpedu","value": "Yerpedu","children": [{"label": "Tirupati","value": "Tirupati"}]}]}]}]}]; const result = clean(response); console.log(result);
您可以創建一個函數removeEmptyValues()
以從對象中刪除任何空屬性。 這將在任何子對象上遞歸調用以從整個樹中刪除空值。
let input = [ { "label": "United States", "value": "United States", "children": [ { "label": "Texas", "value": "Texas", "children": [ { "label": "Galveston County", "value": "Galveston County", "children": [ { "label": "", "value": "", "children": [ { "label": "Texas City", "value": "Texas City" } ] } ] } ] } ] }, { "label": "India", "value": "India", "children": [ { "label": "Karnataka", "value": "Karnataka", "children": [ { "label": "Bengaluru Urban District", "value": "Bengaluru Urban District", "children": [ { "label": "Bengaluru South", "value": "Bengaluru South", "children": [ { "label": "Bengaluru", "value": "Bengaluru" } ] } ] } ] }, { "label": "Meghalaya", "value": "Meghalaya", "children": [ { "label": "South West Garo Hills District", "value": "South West Garo Hills District", "children": [ { "label": "Betasing", "value": "Betasing", "children": [ { "label": "Kebolpara", "value": "Kebolpara" } ] } ] } ] }, { "label": "Andhra Pradesh", "value": "Andhra Pradesh", "children": [ { "label": "Chittoor District", "value": "Chittoor District", "children": [ { "label": "Yerpedu", "value": "Yerpedu", "children": [ { "label": "Tirupati", "value": "Tirupati" } ] } ] } ] } ] } ] function removeEmptyValues(obj) { let removeChildren = false; for(let k in obj) { if ((obj[k] === '') || (obj[k] === null)) { delete obj[k]; obj[k] = obj.children[0][k]; removeChildren = true; } else if (typeof(obj[k]) === 'object') { removeEmptyValues(obj[k]); } } if (removeChildren) delete obj.children; return obj; } console.log(removeEmptyValues(input))
.as-console-wrapper { max-height: 100% !important; top: 0; }
@trincot 的解決方案包括一個附加項,如果沒有children
也刪除空label
或value
。 保持原始數組不變。
另見...
const clean = data => data.flatMap((item) => { let cleanItem; if (!item.children) { cleanItem = {...item}; !cleanItem.label && delete cleanItem.label; !cleanItem.value && delete cleanItem.value; } return !item.children ? cleanItem : item.value && item.label ? { ...item, children: clean(item.children) } : clean(item.children); }); const data = getData(); const cleaned = clean([...data]); document.querySelector(`pre`).textContent = JSON.stringify(cleaned, null, 2); function getData() { return [ { label: 'United States', value: 'United States', children: [ { label: 'Texas', value: 'Texas', children: [ { label: 'Galveston County', value: 'Galveston County', children: [ { label: '', // to be removed value: '', // to be removed children: [ { label: 'Texas City', value: 'Texas City', }, ], }, ], }, ], }, ], }, { label: 'India', value: 'India', children: [ { label: 'Karnataka', value: 'Karnataka', children: [ { label: 'Bengaluru Urban District', value: 'Bengaluru Urban District', children: [ { label: 'Bengaluru South', value: 'Bengaluru South', children: [ { label: 'Bengaluru', value: 'Bengaluru', }, ], }, ], }, ], }, { label: 'Meghalaya', value: 'Meghalaya', children: [ { label: 'South West Garo Hills District', value: 'South West Garo Hills District', children: [ { label: 'Betasing', value: 'Betasing', children: [ { label: 'Kebolpara', value: 'Kebolpara', }, ], }, ], }, ], }, { label: 'Andhra Pradesh', value: 'Andhra Pradesh', children: [ { label: 'Chittoor District', value: 'Chittoor District', children: [ { label: 'Yerpedu', value: 'Yerpedu', children: [ { label: 'Tirupati', value: '', }, ], }, ], }, ], }, ], }, ]; }
<pre></pre>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.