转换JSON数组的对象,从两个属性值创建新的属性
transform JSON array of objects, create new property from two property values
我有一些JSON数据看起来像这样,其中每个对象有三个属性:
data = [
{
"country" : "Ireland",
"year" : "2013",
"number" : 45
},
{
"country" : "Ireland",
"year" : "2014",
"number" : 23430
},
{
"country" : "Honduras",
"year" : "2013",
"number" : 1582
},
{
"country" : "Honduras",
"year" : "2014",
"number" : 3458
}
]
我想转换我的数据,使每个对象只有两个属性。名为"country"的属性将保持不变。我想把另外两个属性结合起来,让"year"的值成为新属性的key,"number"的值就是新属性的值。新的JSON对象数组如下所示:
newData = [
{
"country" : "Ireland",
"2013" : 45,
"2014" : 23430
},
{
"country" : "Honduras",
"2013" : 1582,
"2014" : 3458
}
]
我该怎么做呢?我做了很多调查,但还是找不到解决办法。我更喜欢用javascript来做这个,而不是一个库。
只需遍历每个数据项并向结果数组中添加项。您可以创建一个地图来跟踪您在迭代中看到的国家,以便快速访问。
var newData = [],
countries = {};
data.forEach(function (d) {
var country = countries[d.country];
if (!country) {
newData.push(country = countries[d.country] = {});
}
country[d.year] = d.number;
});
对不起,这是这次javascript的答案:
country_data = new Array();
for(l in data){
if(typeof(country_data[data[l].country]) == 'undefined'){
country_data[data[l].country] = new Array();
}
country_data[data[l].country].country = data[l]['country'];
country_data[data[l].country][data[l].year] = data[l]['number'];
}
new_arr = new Array();
for(v in country_data){
new_arr.push(country_data[v])
}
console.log(new_arr);
输入链接描述
相关文章:
- 检查来自不同数组的两个元素的一个属性是否相等
- 交换对象上两个属性的值
- 删除两个独立对象中的属性,而不使用多余的删除语句
- JavaScript - 合并两个对象数组并根据属性值删除重复数据
- 比较主干中的两个模型属性
- 速度.js动画两个属性时持续时间不同
- 查找/合并具有共同属性的两个对象
- JQuery选择:两个属性's值不相等
- 在ramda.js中将两个属性合并在一起
- 有没有一个lodash函数可以合并两个对象并删除其中一个对象的属性(如果它们没有)'不存在于另一个中
- JS:两个或多个非严格模式下具有相同名称的对象属性
- 如何在 JavaScript 中检查多个对象属性两次
- jQuery 选择器,用于通过比较元素的两个数据属性来选择元素
- 为什么我的 Javascript 中的两个正则表达式文本在一个属性上有所不同
- 两个 JavaScript 对象具有相同的属性实现方式,但原型不同
- JavaScript 中通过公共属性“交叉”两个 JSON 对象数组的最佳方式
- 如何在培根中合并两个属性.js
- 如何根据两个对象属性对对象数组进行排序
- 基于两个属性从 javascript 中的对象数组中获取唯一数组
- 如何连接数组中对象的两个属性以用作ngOptions中的标签