根据键/值从JSON数组中删除条目

时间:2012-04-04 21:22:27

标签: javascript jquery json

这就是我的对象的样子(我对它的格式化方式没有很多控制权):

[{
    "Country": "Spain",
    "info info1": 0.329235716,
    "info info2": 0.447683684,
    "info info3": 0.447683747
}, {
    "Country": "Chile",
    "info info1": 1.302673893,
    "info info2": 1.357820775,
    "info info3": 1.35626442
}, {
    "Country": "USA",
    "info info1": 7.78805016,
    "info info2": 26.59681951,
    "info info3": 9.200900779
}]

我需要保留各种国家/地区,但更改国家/地区名称。还有一些国家需要完全省略。

这是我被咬过的时间之一,而不是我可以同时咀嚼所有这些,而我迄今为止所完成的工作只是轮胎旋转。

$.each(output_json, function() {
  $.each(this, function(k, v) {
    console.log(k);
  });
});

我试图以这种方式遍历它,但我只是得到键/值对,我不知道如何根据我在里面找到的内容删除整个条目。

有没有人知道一个函数/库/ jQuery插件会很快让我以我描述的方式操作对象?

任何帮助都会非常感激。

6 个答案:

答案 0 :(得分:3)

Underscore.js是用于所有数据的库。对您的数据有用的函数是; eachrejectgroupBy

答案 1 :(得分:3)

该死的,忘了jQuery!这是一个纯粹的javascript任务。

  • 要遍历数组,请使用for (var i=0; i<array.length; i++)循环使用对象for (var i in object)
  • 要删除数组条目,请使用splice()。要删除对象属性,请使用delete object[key];
  • 要过滤数组,在现代javascript版本中,您可以为每个条目使用带有回调函数的filter();它创建了一个新的数组。对象没有这种(本机)方法。

您可能会发现一些具有实用功能的库,例如下划线。但是要学习JS,最好先用原生方法来做。

答案 2 :(得分:2)

$(output_json).each(function(i){
    if (this["Country"] == "USA") output_json.splice(i,1);
    else if (this["Country"] == "Spain") this["Country"] = "Brazil";
    else {
        var country = this;
        $(this).each(function(i){
            if (this["info info2"] == 1.302673893) {
                country.splice(i,1);
            } 
        });
    }
})

这是代码的骨架 - 显然你可能有更好的方法来检测重命名,删除等。但是使用splice方法和方括号使得这比使用delete更安全,并且比维护多个数组更有效等等。

答案 3 :(得分:1)

如果您不想直接编写代码来执行所需的操作,可以使用像underscore.js这样的库,它可以打包很多方便的函数来操作集合。因此,在解析了JSON之后,您可以使用reject()来过滤掉集合中的特定对象。

答案 4 :(得分:1)

我相信以下代码大致可以满足您的要求。看看工作小提琴:http://jsfiddle.net/pUhDR/3/ 顺便说一下,我同意@Gazler,你可以使用下划线库,它比这更高级,更容易阅读:

var countriesString = JSON.stringify([{
    "Country": "Spain",
    "info info1": 0.329235716,
    "info info2": 0.447683684,
    "info info3": 0.447683747
}, {
    "Country": "Chile",
    "info info1": 1.302673893,
    "info info2": 1.357820775,
    "info info3": 1.35626442
}, {
    "Country": "USA",
    "info info1": 7.78805016,
    "info info2": 26.59681951,
    "info info3": 9.200900779
}]);

var countries = JSON.parse(countriesString);

// create new array
var newCountriesArray = new Array();
// exclude some countries
var excludeCountries = new Object();
excludeCountries['Spain'] = true;
// rename some countries
var renameCountries = new Object();
renameCountries['USA'] = 'United States of America';

for (index in countries) {
    if (countries[index].Country in renameCountries) {
        countries[index].Country = renameCountries[countries[index].Country];
    }
    if (!(countries[index].Country in excludeCountries)) {
        newCountriesArray.push(countries[index]);
    }
}

alert(JSON.stringify(newCountriesArray));

答案 5 :(得分:0)

您可以在数组上使用delete运算符并删除元素。

  1. 创建要删除的项目列表。在下面的情况'智利'
  2. 遍历列表并删除项目
  3. DEMO

    <强>代码:

    var toRemove = [];
    $.each(output_json, function(i) {
      $.each(this, function(k, v) {
        if (v == 'Chile') toRemove.push(i);
      });
    });
    
    //remove all marked
    for (var i = 0; i < toRemove.length; i++) {
        delete output_json[toRemove[i]];
    }