从ngrx存储中递归删除



我使用Angular 10和库ngrx存储,我不知道如何从ngrx存储器中递归删除。在商店里,我有一个嵌套的对象数组。如何按id递归删除对象?当我尝试使用拼接和功能删除时,我得到了一个错误:

无法分配给对象"[object Array]"的只读属性"0">

我做错了什么?

数据示例:

[
{
"id": 414,
"name": "mail.ru",
"is_main": true,
"subdomains": [
{
"id": 423,
"name": "en.mail.ru",
"is_main": false,
"subdomains": [
{
"id": 429,
"name": "gw.mail1.ru",
"is_main": false,
"subdomains": [
{
"id": 426,
"name": "gw.mail3.ru",
"is_main": false,
"subdomains": []
}
]
}
]
},
{
"id": 425,
"name": "gw.mail.ru",
"is_main": false,
"subdomains": []
}
]
}
]

存储减速器:

case UserInfoActionTypes.UPDATE_DOMAINS_LIST: {
return {
...state,
domainsInfo: deleteItems(state.domainsInfo, [parseInt(action.payload.id, 10)]),
errorMessage: null
};
}`

我的递归函数:

export function deleteItems(array, ids) {
let i = array.length;
while (i--) {
if (ids.indexOf(array[i].id) !== -1) {
array.splice(i, 1);
continue;
}
array[i].subdomains && deleteItems(array[i].subdomains, ids);
}
return array;
}

因此,基本上您需要为状态中的所有内容创建新对象,deleteItems()可能如下所示:

export function deleteItems(array, ids) {
let result = [];
for(item of array) {
if (!ids.includes(item.id)) {
result.push({
...item,
subdomains: deleteItems(item.subdomains, ids),
})
}
}
return result;
}

我对ngrx不太熟悉,也许我错过了一个细节。

最新更新