【问题标题】:Delete element by parameter value in json tree按json树中的参数值删除元素
【发布时间】:2011-11-14 04:28:41
【问题描述】:

我知道有很多类似的问题,但没有一个是相同的。 我有一个相当复杂的 json 树:

"items": [
    {
    "slug": "level_1",
    "items": [
        { 
        "slug": "level_1_1"
        },
        {
        "slug": "level_1_2",
        "items": [
             {
             "slug": "level_1_2_1",
             },
             {
             "slug": "level_1_2_2"
             }
        ] 
        }
    ]},
    {
    "slug": "level_2"
    }
 ]

我需要一个函数来通过“slug”值删除/删除 json 元素。可能吗? 我尝试了所有我发现但没有成功的东西。我可以使用 javascript/jQuery。

【问题讨论】:

    标签: jquery json tree


    【解决方案1】:

    递归处理树:你想要一个由递归处理的元素组成的列表,对于每个具有匹配'slug'值的元素。递归处理包括创建一个新对象,其中包含原始 slug 和通过递归调用函数过滤的“项目”列表。

    类似:

    function my_filter(json_array, slug_to_remove) {
        return $.map(json_array, function(element) { 
            return (element.slug == slug_to_remove) ? null : {
                slug: element.slug, items: my_filter(element.items, slug_to_remove)
            };
        });
    }
    

    【讨论】:

    • 卡尔你好!你为我发现了 $.map!谢谢!事实上,你的解决方案有一个错误。如果子节点中的 'items' 将为空,则会发生异常。我更新了您的解决方案: function my_filter(json_array, slug_to_remove) { return $.map(json_array, function (element) { return (element.slug == slug_to_remove) ? null : { slug: element.slug, items: (element.items == null) ? element.pages : my_filter(element.items, slug_to_remove) }; }); }
    • 我不知道你的数据中有element.pages,但我很高兴你能够让它工作:)
    • 哦,对不起,我在实际项目中使用“页面”而不是“项目”。这是一个备注。 =)
    猜你喜欢
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 2013-02-28
    • 2021-12-25
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多