【问题标题】:How to remove an object in a JSON object?如何删除 JSON 对象中的对象?
【发布时间】:2013-11-06 19:09:21
【问题描述】:

让我解释一下。

我得到了这个带有许多对象的 JSON:
data = [{"id":"784","label":"blah","publisher":"me"},{"id":"785","label":"bleh","publisher":"you"},{"id":"786","label":"blih","publisher":"she"}];

例如:我想删除 id = 785 的对象

我试过了:

$.each( data, function( key, value ) {
if(value.id == '785'){
    delete data[key];
}
});

它有效,但它改变了“数据”结构。现在看起来是这样的:

data = ["0":{"id":"784","label":"blah","publisher":"me"},"2":{"id":"786","label":"blih","publisher":"she"}]

我正在使用一个不接受这种结构的插件(jQuery UI 自动完成)。所以我需要在不改变“数据”结构的情况下删除对象。

有什么帮助吗?

【问题讨论】:

  • 而不是delete,只需像删除数组值一样删除它(因为这就是你正在做的事情)
  • 我无法重现该问题。哪个 jQuery 版本?
  • 这个问题似乎是基于无效的假设,因为该问题不可重现。
  • jquery 1.10.2,UI 1.10.3。

标签: javascript jquery json object


【解决方案1】:

另一种方法是在数组上使用过滤器:

var data = [{"id":"784","label":"blah","publisher":"me"},{"id":"785","label":"bleh","publisher":"you"},{"id":"786","label":"blih","publisher":"she"}];

var result = data.filter(function(x){return x.id !== '785'; });

HTH

【讨论】:

  • 这是最优雅的解决方案。
  • 谢谢您,先生。工作吧!
【解决方案2】:

这是一个对象数组,所以试试:

for (var i = 0; i < data.length; i++) {
    if (data[i].id == 785) {
        data.splice(i, 1);
        break;
    }
}

【讨论】:

  • 你不需要data = data.splice(...),只需要data.splice(...)。它是一个突变体。它返回的值是它删除的东西。
  • 刚刚看到,感谢您的编辑,试图记住 splice 是否需要。
  • 您也应该在删除元素后中断。我假设不会有任何其他 ID 为 785 的对象。
【解决方案3】:

试试这个(小提琴:http://jsfiddle.net/U94Ym/1/):

var i = 0;
while (i < data.length) {
    if (data[i].id === "785") {
        data.splice(i, 1)
    }
    else {
        i++;
    }
}

【讨论】:

    猜你喜欢
    • 2018-07-30
    • 2014-08-23
    • 2017-05-18
    • 1970-01-01
    • 2019-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多