I have 2 array of objects one for USA and another for Canada. The data goes in the following way
const data = [
{country: {cntryShortName:"USA"}}
{country: {cntryShortName:"USA"}}
{country: {cntryShortName:"CAN"}}
{country: {cntryShortName:"USA"}}
{country: {cntryShortName:"CAN"}}
{country: {cntryShortName:"CAN"}}
{country: {cntryShortName:"USA"}}
{country: {cntryShortName:"USA"}}
]
Here I am expecting to divide the data into 2 like as
USA:
.....
.....
CAN:
.....
.....
This is what I've tried
const allData = data.filter(item => item.country)
Here I'm getting all the array data but I want to sort it based on country name but hard coding isn't expected. Any optimal solution
you can do something like this
const data = [
{country: {cntryShortName:"USA"}},
{country: {cntryShortName:"USA"}},
{country: {cntryShortName:"CAN"}},
{country: {cntryShortName:"USA"}},
{country: {cntryShortName:"CAN"}},
{country: {cntryShortName:"CAN"}},
{country: {cntryShortName:"USA"}},
{country: {cntryShortName:"USA"}}
]
const order = ['USA', 'CAN']
const reorder = data.sort((a, b) => {
return order.indexOf(a.country.cntryShortName) - order.indexOf(b.country.cntryShortName)
})
console.log(reorder)
I think you would most likely have to have a new object where you will push the data in after looping over the array. Something like:
let allData = {};
data.forEach(function (countryData) {
if (allData[countryData.country.cntryShortName] !== undefined) {
// Push the data into the array
allData[countryData.country.cntryShortName].push(countryData);
} else {
// Initialize an empty array if the country key doesn't exist
allData[countryData.country.cntryShortName] = [];
}
});
You'll end up with something like this:
{
"USA": [
{
"country": {
"cntryShortName": "USA"
}
},
],
"CAN": [
{
"country": {
"cntryShortName": "CAN"
}
},
]
}
So now you will just be able to grab the country data using:
allData.USA
// or
allData.CAN
f=(a,g=e=>parseInt(e.country.cntryShortName,36))=>a.sort((a,b)=>g(a)-g(b))