javascript - 从动态创建的 ObjectArray 中删除一个对象

标签 javascript angularjs arrays multidimensional-array

我有一个对象数组 列表格式如下

var myFormData = [
{
    id: 1,
    name: "first name",
    type: "test",
    root: "/myfolder"
},
{
    id: 3,
    name: "your name",
    type: "test 2",
    root: "/myfolder2"
}, {
    id: 4,
    name: "your test",
    type: "test 3",
    root: "/myfold",
    child: [
        {
            id: 5,
            name: "name",
            type: "testf",
            root: "/myfoldertr"
        },
        {
            id: 6,
            name: "first-name",
            type: "test",
            root: "/myfolderoot",
            child: [
                {
                    id: 8,
                    name: "sub first name",
                    type: "test5",
                    root: "/myfoldertest"
                }, {
                    id: 9,
                    name: "first name root",
                    type: "test9",
                    root: "/myfolder",
                    child: [
                        {
                            id: 10,
                            name: "normal first name",
                            type: "test5",
                            root: "/myfoldertest"
                        }, {
                            id: 11,
                            name: "last first name",
                            type: "test5",
                            root: "/myfoldertest"
                        }
                    ]
                },
                {
                    id: 12,
                    name: "name Name",
                    type: "testf",
                    root: "/myfoldertr"
                }
            ]
        },
        {
            id: 7,
            name: "first name",
            type: "test",
            root: "/myfolder"
        }
    ]
}]

这种格式是用数据库创建的,所以我不能确认数据是否准确。有时他们有 child 或没有。 如果 id 等于给定 id(以编程方式获取),我想删除一个对象,例如:我想删除 id=11。

最佳答案

关键点是您必须深入查看目标数组。此代码片段示例使用递归调用深入嵌套数组。

function deleteObj(target, id) {
  if (!Array.isArray(target)) return;
  target.forEach(function(item, index) {
    if (item.child) {
      target = deleteObj(item.child, id);
    }
    if (item.id === 11) {
      target.splice(index, 1);
    }
  });
}

var myFormData = [{
    id: 1,
    name: "first name",
    type: "test",
    root: "/myfolder"
  },
  {
    id: 3,
    name: "your name",
    type: "test 2",
    root: "/myfolder2"
  }, {
    id: 4,
    name: "your test",
    type: "test 3",
    root: "/myfold",
    child: [{
        id: 5,
        name: "name",
        type: "testf",
        root: "/myfoldertr"
      },
      {
        id: 6,
        name: "first-name",
        type: "test",
        root: "/myfolderoot",
        child: [{
            id: 8,
            name: "sub first name",
            type: "test5",
            root: "/myfoldertest"
          }, {
            id: 9,
            name: "first name root",
            type: "test9",
            root: "/myfolder",
            child: [{
              id: 10,
              name: "normal first name",
              type: "test5",
              root: "/myfoldertest"
            }, {
              id: 11,
              name: "last first name",
              type: "test5",
              root: "/myfoldertest"
            }]
          },
          {
            id: 12,
            name: "name Name",
            type: "testf",
            root: "/myfoldertr"
          }
        ]
      },
      {
        id: 7,
        name: "first name",
        type: "test",
        root: "/myfolder"
      }
    ]
  }
];

function deleteObj(target, id) {
  if (!Array.isArray(target)) return;
  target.forEach(function(item, index) {
    if (item.child) {
      target = deleteObj(item.child, id);
    }
    if (item.id === 11) {
      target.splice(index, 1);
    }
  });
}

deleteObj(myFormData, 11);
console.log(myFormData);

关于javascript - 从动态创建的 ObjectArray 中删除一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43012569/

相关文章:

javascript - 在循环期间从列表中删除随机选择的数组

javascript - 在函数中按字符串长度对数组进行排序

php - 重置数组的数字键

arrays - 来自 JSON 字符串数组的 MarkLogic TDE Xpath 值

无重排整数分区的JavaScript递归实现

javascript - 使用 jQuery 匹配动态添加的事件(作为属性)

javascript - 关闭对话框后如何更改值( Angular Material )?

javascript - 是否可以在模板中动态加载指令?

AngularJS : Pass data to state with $state. 进入 Angular-ui-router

javascript - AngularJS + Google map 不显示标记