这就是我的对象的样子(我对它的格式化方式没有很多控制权):
[{
"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插件会很快让我以我描述的方式操作对象?
任何帮助都会非常感激。
答案 0 :(得分:3)
Underscore.js是用于所有数据的库。对您的数据有用的函数是; each,reject和groupBy。
答案 1 :(得分:3)
该死的,忘了jQuery!这是一个纯粹的javascript任务。
for (var i=0; i<array.length; i++)
循环使用对象for (var i in object)
splice()
。要删除对象属性,请使用delete object[key];
。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
运算符并删除元素。
<强>代码:强>
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]];
}