如何从JavaScript中删除多维数组中的元素(角度5)

时间:2018-01-16 12:11:09

标签: javascript arrays multidimensional-array

我有这样的结构:

    [{
    "id": 150,
    "children": [
      {
        "id": 72,
        "children": [
          {
            "id": 73,
            "children": [],
          },
          {
            "id": 77,
            "children": [
              {
                "id": 146,
                "children": [
                  {
                    "id": 147,
                    "children": [
                      {
                        "id": 148,
                        "children": [
                          {
                            "id": 149,
                            "children": []
                          }
                        ]
                      }
                    ]
                  }
                ]
              }
            ]
          }
        ]
      }
    ]
  }
 ]

现在需要删除id为149的元素 需要使用带递归的过滤器或我不知道=( 条件一 - 嵌套可以无限制

2 个答案:

答案 0 :(得分:2)

您可以对children采用递归方法,并检查实际对象id是否等于所需的id。然后拼接数组并返回true以停止进一步迭代(假设所有id都是唯一的)。



var data = [{ id: 150, children: [{ id: 72, children: [{ id: 73, children: [] }, { id: 77, children: [{ id: 146, children: [{ id: 147, children: [{ id: 148, children: [{ id: 149, children: [] }] }] }] }] }] }] }],
    id = 149;

data.some(function iter (o, i, a) {
    if (o.id === id) {
        a.splice(i, 1);
        return true;
    }
    return o.children && o.children.some(iter);
});
    
console.log(data);

.as-console-wrapper { max-height: 100% !important; top: 0; }




答案 1 :(得分:0)

管理该结构的数据是不现实的。你可以使用id为149的那个元素,但它会很慢而且很麻烦。

我建议重新构造你的数组,以便没有那么多的嵌套。