【问题标题】:Delete One object From Dynamically created ObjectArray从动态创建的 ObjectArray 中删除一个对象
【发布时间】:2017-08-18 03:55:10
【问题描述】:

我有一个对象数组 像这样的列表格式

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"
        }
    ]
}]

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

【问题讨论】:

    标签: javascript angularjs arrays multidimensional-array


    【解决方案1】:

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

    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);

    【讨论】:

    • 谢谢彭吉。 :)
    • @FirozP.J 很高兴它有帮助。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-17
    • 2015-06-20
    • 2020-06-04
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多