Tengo 2 conjuntos de objetos, uno para EE. UU. y otro para Canadá. Los datos van de la siguiente manera
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"}} ]Aquí espero dividir los datos en 2 como
USA: ..... ..... CAN: ..... .....Esto es lo que he probado
const allData = data.filter(item => item.country)Aquí obtengo todos los datos de la matriz, pero quiero ordenarlos según el nombre del país, pero no se espera una codificación estricta. Cualquier solución óptima
puedes hacer algo como esto
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)Creo que lo más probable es que tenga que tener un nuevo objeto en el que insertará los datos después de recorrer la matriz. Algo como:
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] = []; } });Terminarás con algo como esto:
{ "USA": [ { "country": { "cntryShortName": "USA" } }, ], "CAN": [ { "country": { "cntryShortName": "CAN" } }, ] }Entonces ahora solo podrá obtener los datos del país usando:
allData.USA // or allData.CAN f=(a,g=e=>parseInt(e.country.cntryShortName,36))=>a.sort((a,b)=>g(a)-g(b))