【问题标题】:Remove element from JSON Object从 JSON 对象中删除元素
【发布时间】:2013-03-16 15:55:05
【问题描述】:

我有一个 json 数组,看起来像这样:

  {
    "id": 1,
    "children": [
    {
        "id": 2,
        "children": {
            "id": 3,
            "children": {
                "id": 4,
                "children": ""
            }
        }
    },
    {
        "id": 2,
        "children": {
            "id": 3,
            "children": {
                "id": 4,
                "children": ""
            }
        }
    },
    {
        "id": 2,
        "children": {
            "id": 3,
            "children": {
                "id": 4,
                "children": ""
            }
        }
    },
    {
        "id": 2,
        "children": {
            "id": 3,
            "children": {
                "id": 4,
                "children": ""
            }
        }
    },
    {
        "id": 2,
        "children": {
            "id": 3,
            "children": {
                "id": 4,
                "children": ""
            }
        }
    },
    {
        "id": 2,
        "children": {
            "id": 3,
            "children": {
                "id": 4,
                "children": ""
            }
        }
    },
    {
        "id": 2,
        "children": {
            "id": 3,
            "children": {
                "id": 4,
                "children": ""
            }
        }
    }]
}

我想要一个函数来删除“孩子”为空的元素。我该怎么做?我不求答案,只求建议

【问题讨论】:

  • 小心:那些= 标志暗示无效的JSON
  • @magritte 停止回答这个多余的问题。他说他正在征求建议。不是答案/
  • @rjz ,是的,那些 = 应该是:...
  • 我知道这不是一个有效的 json ...我只是想举一个例子来说明它的外观。
  • 如果你说你有一个数组,请发布一个数组。并查看filter array function

标签: javascript jquery json


【解决方案1】:

要遍历对象的键,请使用 for .. in 循环:

for (var key in json_obj) {
    if (json_obj.hasOwnProperty(key)) {
        // do something with `key'
    }
}

要测试所有元素的空子元素,您可以使用递归方法:遍历所有元素并递归测试它们的子元素。

可以使用delete 关键字来删除对象的属性:

var someObj = {
    "one": 123,
    "two": 345
};
var key = "one";
delete someObj[key];
console.log(someObj); // prints { "two": 345 }

文档:

【讨论】:

  • +1 ... 我已经用 Javascript 编码多年,我什至不知道 delete 运算符的存在?!
  • 我认为他应该使用 splice() 方法而不是删除,因为孩子们被保存在一个数组中?
  • @magritte 他听过数组和对象。我正在等待一些澄清,但是是的,如果有数组,他可以使用 splice 删除元素或使用 filter 迭代和删除内容。
  • +1 它是清除删除不会从数组中删除数组元素而是将其替换为未定义的地方。 delete 仅用于从对象中删除道具。
【解决方案2】:

JSfiddle

function deleteEmpty(obj){
        for(var k in obj)
         if(k == "children"){
             if(obj[k]){
                     deleteEmpty(obj[k]);
             }else{
                   delete obj.children;
              } 
         }
    }

for(var i=0; i< a.children.length; i++){
 deleteEmpty(a.children[i])
}

【讨论】:

    猜你喜欢
    • 2012-08-06
    • 2016-08-05
    • 2022-08-17
    • 1970-01-01
    • 2014-05-05
    • 2020-05-11
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    相关资源
    最近更新 更多