Estoy tratando de ordenar los objetos en la matriz de "expositores" por su título si su display_order es nulo. Pero cuando trato de hacer esto, aparece el error: Error de tipo: no se puede asignar a la propiedad de solo lectura '0' del objeto '[matriz de objetos]'. ¿Es porque la matriz que intento ordenar es demasiado profunda?
let sortedTiers = [...exhibitorTiers] .sort((a, b) => { return a.order - b.order; }) .map((tier) => { tier.exhibitors.sort((a, b) => a.title.localeCompare(b.title)); return tier; }); The data structure is below [ { "exhibitor_tier_id": 269, "tier_name": ";ll", "order": 1, "color": null, "type": "expo", "exhibitors": [ { "exhibitor_id": 6218, "title": "Audax Group", "event_stream_id": null, "display_order": 1, }, { "exhibitor_id": 6220, "title": "Apex Group", "display_order": 5, } ] }, { "exhibitor_tier_id": 237, "tier_name": ";lkj;klj", "order": 2, "color": null, "type": "expo", "exhibitors": [ { "exhibitor_id": 6224, "title": "EnCap Investments", "display_order": null, }, { "exhibitor_id": 6226, "title": "Preqin", "display_order": null, }, { "exhibitor_id": 6229, "title": "HKVCA", "display_order": null, }, { "exhibitor_id": 6232, "title": "SVCA", "display_order": null, } ] } ]```No está devolviendo nada cuando el ID de display_order NO es null . Prueba esto
var arraytosort = orginalArray.slice(); arraytosort.sort((a, b) => { if (a.display_order === null && b.display_order != null) { return -1; }else if (a.display_order != null && b.display_order === null) { return 1; }else if (a.display_order != null && b.display_order != null) { return a.display_order - b.display_order; }else{ return a.title.localeCompare(b.title) } }); }) orginalArray = arraytosortAquí vamos. Elimine el slice y compare display_order s si existen
const tiers = [{ "exhibitor_tier_id": 269, "tier_name": ";ll", "order": 1, "color": null, "type": "expo", "exhibitors": [{ "exhibitor_id": 6218, "title": "Audax Group", "event_stream_id": null, "display_order": 1, }, { "exhibitor_id": 6220, "title": "Apex Group", "display_order": 5, } ] }, { "exhibitor_tier_id": 237, "tier_name": ";lkj;klj", "order": 2, "color": null, "type": "expo", "exhibitors": [{ "exhibitor_id": 6224, "title": "EnCap Investments", "display_order": null, }, { "exhibitor_id": 6226, "title": "Preqin", "display_order": null, }, { "exhibitor_id": 6229, "title": "HKVCA", "display_order": null, }, { "exhibitor_id": 6232, "title": "SVCA", "display_order": null, } ] } ]; tiers .sort((a, b) => a.order - b.order) .forEach( tier => tier.exhibitors.sort( (a, b) => (~~a.display_order - ~~b.display_order) || a.title.localeCompare(b.title) ) ); console.log(tiers); .as-console-wrapper { max-height: 100% !important; top: 0; }