SMILET
2022-09-29 17:42:04
我有以下模型對象:const model = { _id: '1', children: [ { id: '2', isCriteria: true }, { id: '3', isCriteria: true } ]}PS:孩子的深度是未知的,所以我必須使用遞歸函數來導航它。我想根據id數組從子數組中刪除特定對象。因此,例如,如果進行以下調用,則結果應為:removeCriteria(model, ['2'])const model = { _id: '1', children: [ { id: '2', isCriteria: true } ]}我按如下方式實現了這個函數:function removeCriteria(node, criteria, parent = []) { if (node.isCriteria) { if (criteria.length && !criteria.includes(node.id)) { parent = parent.filter(criteria => criteria.id !== node.id); } console.log(parent) // here the parents object is correct but it doesn't modify the original object } if (node.children) for (const child of node.children) removeCriteria(child, criteria, node.children);}
1 回答

HUH函數
TA貢獻1836條經驗 獲得超4個贊
賦值給 不會賦值到值來自的對象屬性。parent
您需要篩選并分配回該屬性。node.children
function removeCriteria(node, criteria) {
if (criteria.length == 0) {
return;
}
if (node.children) {
node.children = node.children.filter(child => !child.isCriteria || criteria.includes(child.id));
node.children.forEach(child => removeCriteria(child, criteria));
}
}
const model = {
_id: '1',
children: [{
id: '2',
isCriteria: true
},
{
id: '3',
isCriteria: true
}
]
}
removeCriteria(model, ['2']);
console.log(model);
添加回答
舉報
0/150
提交
取消