根据键/值从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插件,它会很快让我以我描述的方式操作对象?

任何帮助将不胜感激。

 $(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更安全,并且比维护多个数组等更有效。

Underscore.js是用于所有数据的库。 对您的数据有用的函数是; 每一个 , 拒绝和groupBy 。

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

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

您可能会发现一些具有实用function的库,如下划线。 但是要学习JS,最好先使用本机方法。

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

我相信以下代码大致可以满足您的要求。 看看工作小提琴: 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)); 

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

  1. 创建要删除的项目列表。 在下面的情况’智利’
  2. 迭代列表并删除项目

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]]; }