繁体   English   中英

从具有n元树结构的数组中删除元素

[英]remove an element from array with structure of n-ary tree

我有一个像下面这样的数组:

    var data= 
    [
    {"id":"root1","name":"root1","childNodes":
            [
            {"id":"child1_root1","name":"child1_root1","childNodes":
                [
                {"id":"child1of_child1_root1","name":"child1of_child1_root1"}
                ]
            },
            {"id":"child2_root1","name":"child2_root1","childNodes":[]}
            ]
    },

    {"id":"root2","name":"root2","childNodes":
        [
        {"id":"child1root2","name":"child1root2"}
        ]
    },

    {"id":"root3","name":"root3","childNodes":
        [
        {"id":"child1root3","name":"child1root3"}
        ]
    }
    ]

现在,我想删除具有某些ID的节点。 如果节点有一些节点,则也应将它们从阵列中删除。

假设我有一个要删除的节点ID数组:

var nodestobe_removed=["child1_root1","child1root2"];

在此第一个节点中有一个子节点,因此该节点及其子节点都将被删除。

第二节点没有子节点,因此仅此节点将被删除。

有没有一种简单的方法可以在JQuery中执行此操作,而不是遍历数组中的每个节点?

这是尝试链接 使用控制台查看结果。

你可以使用inArray()splice()我想......如果你热衷于避免循环:

var data = data.splice(jQuery.inArray(nodestobe_removed[0], data), 1);

这假定您确定nodestobe_removed中的值在data

但实际上...循环是很好的...的主要功能之一...像编程和其他东西。

如果执行以下操作,您的代码将更加灵活:

//ECMAScript 5.1+

data.forEach(function(element, index, arr) {
    for(var key in element.keys())
    {
        if(jQuery.inArray(key, nodestobe_removed) != -1)
        { 
            data.splice(index, 1); 
        }
    }
});

这样,如果将来数组的内容发生变化,则不必更新代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM