Tengo una matriz JSON de la siguiente manera:
[{ "name": "ABC", "default": false, "details": [ { "detail1": "value1" }, { "detail2": "value2" } ] }, { "name": "PQR", "default": false, "details": [ { "detail3": "value3" }, { "detail4": "value4" } ] }, { "name": "XYZ", "default": true, "details": [ { "detail5": "value5" }, { "detail6": "value6" } ] }] Ahora, si el valor default es true , quiero que sea el primer elemento de la matriz y el resto de los elementos deben ordenarse alfabéticamente según el name . Solo uno de los elementos tendrá el default como true o todos los elementos tendrán el default como false .
El JSON esperado después de la clasificación debe ser:
[{ "name": "XYZ", "default": true, "details": [ { "detail5": "value5" }, { "detail6": "value6" } ] }, { "name": "ABC", "default": false, "details": [ { "detail1": "value1" }, { "detail2": "value2" } ] }, { "name": "PQR", "default": false, "details": [ { "detail3": "value3" }, { "detail4": "value4" } ] }]He probado este código para ordenar la matriz JSON:
jsonArray.sort( function( a, b ) { a = a.name.toLowerCase(); b = b.name.toLowerCase(); return a < b ? -1 : a > b ? 1 : 0; }); Pero no puedo averiguar cómo verificar el valor default y ordenarlo en consecuencia. ¿Cómo logro el resultado esperado?
Estás en el camino correcto. Simplemente modifique la función para incluir la verificación por default :
jsonArray.sort( function( a, b ) { const name1 = a.name.toLowerCase(); const name2 = b.name.toLowerCase(); return (b.default - a.default) || ((name1 > name2) - (name2 > name1)) });Tengo el código rápido para la comparación de cadenas desde aquí: https://stackoverflow.com/a/17765169/2244262