Reputation: 10571
I am expecting something like:
0:
Province_State: "Alabama",
lat: 45.0732745,
long: 7.680687483,
0 data:
0 date: "2/24/20",
positive: 329,
negative: 10790,
pending: null,
hospitalizedCurrently: 42,
hospitalizedCumulative: 36...
1 date: "2/25/20",
positive: 329,
negative: 10790,
pending: null,
hospitalizedCurrently: 42,
hospitalizedCumulative: 36..
Using this:
const formatted = data.map(area => {
return {
"state": area["Province_State"],
"lat": area["lat"],
"long": area["long"],
"data": Object.assign({},Object.keys(area)
.map(date => ({ date: area[date], Deaths: area[date], Confirmed: area[date], Recovered: area[date], Active: area[date],
FIPS: area[date], Incident_Rate: area[date], People_Tested: area[date], People_Hospitalized: area[date],
Mortality_Rate: area[date], UID: area[date], ISO3: area[date], Testing_Rate: area[date],
Hospitalization_Rate: area[date] })))
}
});
But having wrong grouping
data:
0: {date: "Alabama", Deaths: "Alabama", Confirmed: "Alabama", Recovered: "Alabama", Active: "Alabama", …}
1: {date: "US", Deaths: "US", Confirmed: "US", Recovered: "US", Active: "US", …}
2: {date: "2020-05-10 02:32:34", Deaths: "2020-05-10 02:32:34", Confirmed: "2020-05-10 02:32:34", Recovered: "2020-05-10 02:32:34", Active: "2020-05-10 02:32:34", …}
3: {date: "32.3182", Deaths: "32.3182", Confirmed: "32.3182", Recovered: "32.3182", Active: "32.3182", …}
4: {date: "-86.9023", Deaths: "-86.9023", Confirmed: "-86.9023", Recovered: "-86.9023", Active: "-86.9023", …}
5: {date: "9668", Deaths: "9668", Confirmed: "9668", Recovered: "9668", Active: "9668", …}
6: {date: "390", Deaths: "390", Confirmed: "390", Recovered: "390", Active: "390", …}
7: {date: "", Deaths: "", Confirmed: "", Recovered: "", Active: "", …}
8: {date: "9278.0", Deaths: "9278.0", Confirmed: "9278.0", Recovered: "9278.0", Active: "9278.0", …}
9: {date: "1", Deaths: "1", Confirmed: "1", Recovered: "1", Active: "1", …}
10: {date: "206.1892167816866", Deaths: "206.1892167816866", Confirmed: "206.1892167816866", Recovered: "206.1892167816866", Active: "206.1892167816866", …}
11: {date: "125494", Deaths: "125494", Confirmed: "125494", Recovered: "125494", Active: "125494", …}
12: {date: "1228", Deaths: "1228", Confirmed: "1228", Recovered: "1228", Active: "1228", …}
13: {date: "4.033926354985519", Deaths: "4.033926354985519", Confirmed: "4.033926354985519", Recovered: "4.033926354985519", Active: "4.033926354985519", …}
14: {date: "84000001", Deaths: "84000001", Confirmed: "84000001", Recovered: "84000001", Active: "84000001", …}
15: {date: "USA", Deaths: "USA", Confirmed: "USA", Recovered: "USA", Active: "USA", …}
16: {date: "2676.4076924701053", Deaths: "2676.4076924701053", Confirmed: "2676.4076924701053", Recovered: "2676.4076924701053", Active: "2676.4076924701053", …}
17: {date: "12.701696317749276", Deaths: "12.701696317749276", Confirmed: "12.701696317749276", Recovered: "12.701696317749276", Active: "12.701696317749276", …}
Where am I doing it wrong?
UPDATE
Also tried:
const formatted = Object.assign(
{},data.map(
area => {
return {
"state": area["state"],
"lat": area["lat"],
"long": area["long"],
"data": Object.assign({},Object.keys(area)
.map(
date => ({
date: area[date], Deaths: area[date], Confirmed: area[date], Recovered: area[date], Active: area[date],
FIPS: area[date], Incident_Rate: area[date], People_Tested: area[date], People_Hospitalized: area[date],
Mortality_Rate: area[date], UID: area[date], ISO3: area[date], Testing_Rate: area[date],
Hospitalization_Rate: area[date]
})
)
)
};
}
)
);
UPDATE TWO
Sample data:
var data =[
{
"Province_State": "Alabama",
"Country_Region": "US",
"date": "2020-05-10 02:32:34",
"lat": "32.3182",
"long": "-86.9023",
"Confirmed": "9668",
"Deaths": "390",
"Recovered": "",
"Active": "9278.0",
"FIPS": "1",
"Incident_Rate": "206.1892167816866",
"People_Tested": "125494",
"People_Hospitalized": "1228",
"Mortality_Rate": "4.033926354985519",
"UID": "84000001",
"ISO3": "USA",
"Testing_Rate": "2676.4076924701053",
"Hospitalization_Rate": "12.701696317749276"
},
{
"Province_State": "Alaska",
"Country_Region": "US",
"date": "2020-05-10 02:32:34",
"lat": "61.3707",
"long": "-152.4044",
"Confirmed": "378",
"Deaths": "10",
"Recovered": "318",
"Active": "50.0",
"FIPS": "2",
"Incident_Rate": "63.23724506439994",
"People_Tested": "26449",
"People_Hospitalized": "",
"Mortality_Rate": "2.6455026455026456",
"UID": "84000002",
"ISO3": "USA",
"Testing_Rate": "4424.766917217762",
"Hospitalization_Rate": ""
},
{
"Province_State": "American Samoa",
"Country_Region": "US",
"date": "2020-05-10 02:32:34",
"lat": "-14.270999999999999",
"long": "-170.132",
"Confirmed": "0",
"Deaths": "0",
"Recovered": "",
"Active": "0.0",
"FIPS": "60",
"Incident_Rate": "0.0",
"People_Tested": "83",
"People_Hospitalized": "",
"Mortality_Rate": "",
"UID": "16",
"ISO3": "ASM",
"Testing_Rate": "149.17057565464316",
"Hospitalization_Rate": ""
}...
Upvotes: 0
Views: 60
Reputation: 15268
Collects object data into an array under property .data based on same Province_State using a hashmap. Uses reduce.
Assumes that Province_State is a unique group identifier. Replace use of Province_State with whatever you want to use for grouping.
console.log(
Object.values( // discard keys
data.reduce( (acc, {Province_State, lat, long, ...rest}) => ((
// if [Province_State] already exists push object onto .data array
acc[Province_State] && acc[Province_State].data.push(rest) ||
// else add new object for key [Province_State]
(acc[Province_State]={Province_State, lat, long, data:[rest]})
), acc), {})
)
)
<head><script>
var data =[
{
"Province_State": "Alabama",
"Country_Region": "US",
"date": "2020-05-10 02:32:34",
"lat": "32.3182",
"long": "-86.9023",
"Confirmed": "9668",
"Deaths": "390",
"Recovered": "",
"Active": "9278.0",
"FIPS": "1",
"Incident_Rate": "206.1892167816866",
"People_Tested": "125494",
"People_Hospitalized": "1228",
"Mortality_Rate": "4.033926354985519",
"UID": "84000001",
"ISO3": "USA",
"Testing_Rate": "2676.4076924701053",
"Hospitalization_Rate": "12.701696317749276"
},
{
"Province_State": "Alaska",
"Country_Region": "US",
"date": "2020-05-10 02:32:34",
"lat": "61.3707",
"long": "-152.4044",
"Confirmed": "378",
"Deaths": "10",
"Recovered": "318",
"Active": "50.0",
"FIPS": "2",
"Incident_Rate": "63.23724506439994",
"People_Tested": "26449",
"People_Hospitalized": "",
"Mortality_Rate": "2.6455026455026456",
"UID": "84000002",
"ISO3": "USA",
"Testing_Rate": "4424.766917217762",
"Hospitalization_Rate": ""
},
{
"Province_State": "American Samoa",
"Country_Region": "US",
"date": "2020-05-10 02:32:34",
"lat": "-14.270999999999999",
"long": "-170.132",
"Confirmed": "0",
"Deaths": "0",
"Recovered": "",
"Active": "0.0",
"FIPS": "60",
"Incident_Rate": "0.0",
"People_Tested": "83",
"People_Hospitalized": "",
"Mortality_Rate": "",
"UID": "16",
"ISO3": "ASM",
"Testing_Rate": "149.17057565464316",
"Hospitalization_Rate": ""
},
{
"Province_State": "Alabama",
"Country_Region": "US",
"date": "2020-05-10 02:32:40",
"lat": "12.3182",
"long": "-86.9023",
"Confirmed": "9668",
"Deaths": "390",
"Recovered": "",
"Active": "9278.0",
"FIPS": "1",
"Incident_Rate": "206.1892167816866",
"People_Tested": "125494",
"People_Hospitalized": "1228",
"Mortality_Rate": "4.033926354985519",
"UID": "84000001",
"ISO3": "USA",
"Testing_Rate": "2676.4076924701053",
"Hospitalization_Rate": "12.701696317749276"
}
]
</script>
Upvotes: 1
Reputation: 3418
Here's a simplified version of creating your data
property using reduce
function.
const formatted = data.map(
area => {
return {
"state": area["Province_State"],
"lat": area["lat"],
"long": area["long"],
"data": Object.keys(area).reduce( (prev, next) => {
prev[next]= area[next];
return prev;
} , {})
};
}
);
You have now a code where you don't need to explicitly write all the properties names because of this line
Object.keys(area).reduce( (prev, next) => {
prev[next]= area[next];
return prev;
} , {})
I'm basically creating a new object and then create the properties dynamically since you can get the property names in Object.keys(area)
.
Here's a demo link https://playcode.io/600767/
Upvotes: 0