从 ngrx 存储中递归删除

Recursive delete from ngrx store

我使用 Angular 10 和库 ngrx 存储,但我不明白如何从 ngrx 存储中递归删除。在商店中,我有一个嵌套的对象数组。如何通过 id 递归删除对象?当我尝试使用拼接和函数删除时出现错误:

Cannot assign to read only property '0' of object '[object Array]'

我做错了什么?

数据示例:

[
  {
    "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不是很熟悉,可能漏掉了一个细节