简体   繁体   English

将嵌套数组转换为单个数组

[英]Convert the nested array to single array

I have array format like this 我有这样的数组格式

 response = { "data": [{ "districts": [{ "id": 1, "name": "sikkim district", "statistics": [{ "food saftey": 2, "food ": 2, "air pollution": 0 }, { "food saftey": 5, "food ": 6, "air pollution": 7 }, { "food saftey": 7, "food ": 6, "air pollution": 0 } ] }] }, { "districts": [{ "id": 2, "name": "Bhojpur", "statistics": [{ "food saftey": 1, "food ": 1, "air pollution": 1 }, { "food saftey": 5, "food ": 7, "air pollution": 6 }, ] }] } ], } 

and the required format is 所需的格式是

 { "data": [{ "district": "sikkim district", "food saftey": 2, "food ": 2, "air pollution": 0 }, { "district": "sikkim district", "food saftey": 5, "food ": 6, "air pollution": 7 }, "district": "sikkim district", { "food saftey": 7, "food ": 6, "air pollution": 0 }, { "district": "Bhojpur", "food saftey": 1, "food ": 1, "air pollution": 1 }, { "district": "Bhojpur", "food saftey": 5, "food ": 7, "air pollution": 6 }, ], 

The array format is in dynamic which keeps changing except the district and the district has to be at the beginning of the array. 数组格式是动态的,除了区和区必须位于数组的开头外,它会不断变化。

Html should be in this format HTML应该采用这种格式

 <table id="dataTable1" class="table table-condensed table-bordered custom-col-auto row-border hover"> <thead> <tr> <th class="custom-header-col" *ngFor="let column of columns"> {{column}} </th> </tr> </thead> <tbody> <tr *ngFor="let data of reportsComplainTypeData"> <td class="custom-body-col" *ngFor='let column of columns'>{{data.data[column]| json}}</td> </tr> </tbody> </table> 

This is how the html should look like as the data is dynamic and keeps changing other then district 这是html的样子,因为数据是动态的,并且不断变化,然后区域

This is what i have tried to rearrange the array 这就是我试图重新排列数组

 response.data.filter(item => { item.districts.filter(item1 => { item1.statistics.map(data => { value.push({ districts: item1.name, data }) }) }) }) value.map(item => { item.data.districts = item.districts delete item.districts; }) 

You could pull out the wanted properties and assemble a new objects for each level. 您可以拉出所需的属性,并为每个级别组装一个新对象。

 var response = { data: [{ districts: [{ id: 1, name: "sikkim district", statistics: [{ "food saftey": 2, "food ": 2, "air pollution": 0 }, { "food saftey": 5, "food ": 6, "air pollution": 7 }, { "food saftey": 7, "food ": 6, "air pollution": 0 }] }] }, { districts: [{ id: 2, name: "Bhojpur", statistics: [{ "food saftey": 1, "food ": 1, "air pollution": 1 }, { "food saftey": 5, "food ": 7, "air pollution": 6 }] }] }] }; response.data = response.data.reduce((r, { districts }) => districts.reduce((s, { name: district, statistics }) => statistics.reduce((t, statistic) => [...t, { district, ...statistic }], s), r ), [] ); console.log(response.data); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

Use some format function: 使用一些格式功能:

function formatResponse(response) {
  return response.data.map((item) => {
    let district = item.districts[0];
    obj = {name: district.name};
    return Object.assign(obj, district.statistics[0]);
  });
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM