【发布时间】:2020-06-12 01:46:53
【问题描述】:
我有以下模型对象:
const model = {
_id: '1',
children: [
{
id: '2',
isCriteria: true
},
{
id: '3',
isCriteria: true
}
]
}
PS:children的深度是未知的,所以我必须使用递归函数来导航。
我想根据 ids 数组从子数组中删除特定对象。
因此,例如,如果进行以下调用 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);
}
【问题讨论】:
-
removeCriteria(model, ['2'])的结果不应该是id3 的对象吗? -
@awarrier99 不,我想保留给定数组中存在的对象。
-
也许你应该重命名你的函数
keepCriteria。 -
@Nick 但我正在删除基于数组的条件,该数组上不存在的条件将被删除。
-
不,你是对的,这根本不是问题,但通常人们将一个值传递给一个想要删除而不是保留的
remove函数。
标签: javascript arrays object recursion