对象操作



我正在使用PHP或Javascript从API样本中操作json对象:

{
"data": [
{
"label": "employeeCount",
"stats": [
{
"year": "2015",
"value": "10"
},
{
"year": "2017",
"value": "30"
},
{
"year": "2016",
"value": "50"
}
]
},
{
"label": "managerCount",
"stats": [
{
"year": "2015",
"value": "2"
},
{
"year": "2017",
"value": "4"
},
{
"year": "2016",
"value": "6"
}
]
}
]
}

我需要按年份将其分类为这样的对象:

"record": {
"2015" : {
"employeeCount": "10",
"managerCount": "2"
},
"2016" : {
"employeeCount": "30",
"managerCount": "4"
},
"2017"{
"employeeCount": "50",
"managerCount": "6"
}
}

year的数量和label的数量将与 API 调用不同,所以我正在考虑使用 for 循环来实现它。 但到目前为止还没有成功。 你会用什么方法进行这种操纵?

使用 Array.forEach

逻辑- 想法是遍历对象中的data array,然后对于数据数组中的每个条目,迭代其相应的stats array以根据year填充对象。在循环访问stat array时,检查结果对象中的现有条目。如果不存在,请为其创建一个条目。通过将label添加为来更新条目,并在stat array中从其相应的对象value

let obj = {"data":[{"label":"employeeCount","stats":[{"year":"2015","value":"10"},{"year":"2017","value":"30"},{"year":"2016","value":"50"}]},{"label":"managerCount","stats":[{"year":"2015","value":"2"},{"year":"2017","value":"4"},{"year":"2016","value":"6"}]}]};
// Create the response object
let r = {"record":{}};
// Iterate over data array
obj.data.forEach(o => {
// Iterate over stats for each object in data array
o.stats.forEach(s => {
// Create entry for year in result object if it does not exist
r.record[s.year] = r.record[s.year] || {};
// Add the label of data array object with corresponding stat value in resultant object
r.record[s.year][o.label] = s.value;
});
});
console.log(r);

let data = json.data
let map={}
for(let i=0;i<data.length;i++){
let stats = data[i].stats
for(let j=0;j<stats.length;j++){
let it = stats[j]
if(!map[it.year]){
map[it.year]={}
}
map[it.year][data[i].label]=it.value
}
}
console.log({record:map})

最新更新