根据键/值从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
运算符并删除该元素。
- 创建要删除的项目列表。 在下面的情况’智利’
- 迭代列表并删除项目
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]]; }