I have the following array:
[{"cod_nivel":"INC2","cod_modelo":"D"},
{"cod_nivel":"PRIM1","cod_modelo":"B"},
{"cod_nivel":"INC2","cod_modelo":"B"},
{"cod_nivel":"INC1","cod_modelo":"D"},
{"cod_nivel":"PRIM1","cod_modelo":"D"},
{"cod_nivel":"BAC2","cod_modelo":"B"},
{"cod_nivel":"BAC2","cod_modelo":"D"},
{"cod_nivel":"BAC2","cod_modelo":"A"}]
I need to order this array of objects by "cod_modelo" ascending grouped by "cod_nivel". So the result should be:
[{"cod_nivel":"INC1","cod_modelo":"D"},
{"cod_nivel":"INC2","cod_modelo":"B"},
{"cod_nivel":"INC2","cod_modelo":"D"},
{"cod_nivel":"PRIM1","cod_modelo":"B"},
{"cod_nivel":"PRIM1","cod_modelo":"D"},
{"cod_nivel":"BAC2","cod_modelo":"A"},
{"cod_nivel":"BAC2","cod_modelo":"B"},
{"cod_nivel":"BAC2","cod_modelo":"D"}]
Ok I made this code that orders the array first by cod_nivel and then by cod_modelo:
var sortedArray = array.sort(function (a, b) {
return (a["cod_nivel"] > b["cod_nivel"]) ? 1 : -1;
}).sort(function (a, b) {
if (a["cod_nivel"] == b["cod_nivel"])
return (a["cod_modelo"] > b["cod_modelo"]) ? 1 : -1;
else
return 0;
});
The thing is that this code is ordering also by "cod_nivel" so the obtained array would be:
[{"cod_nivel":"BAC2","cod_modelo":"A"},
{"cod_nivel":"BAC2","cod_modelo":"B"},
{"cod_nivel":"BAC2","cod_modelo":"D"},
{"cod_nivel":"INC1","cod_modelo":"D"},
{"cod_nivel":"INC2","cod_modelo":"B"},
{"cod_nivel":"INC2","cod_modelo":"D"},
{"cod_nivel":"PRIM1","cod_modelo":"B"},
{"cod_nivel":"PRIM1","cod_modelo":"D"}]
Note that BAC2 cod_nivel objects are at the beginning.
What I need is to order first by cod_nivel but in a given order, which is:
- INC1
- INC2
- PRIM1
- PRIM2
- BAC1
- BAC2
I assume I need an array with the fixed order of "cod_nivel" and use it while ordring but I don't know how to use it so I did not include in my approach.
var order_arr = ['INC1', 'INC2', 'PRIM1', 'PRIM2', 'BAC1', 'BAC2']
And after that, order then by cod_modelo (grouped by each cod_nivel).
I hope I have explained myself clearly and someone can help me.