¿Alguien puede decirme lo que me estoy perdiendo aquí? No me da el resultado esperado.
Quería ordenar la matriz en orden ascendente y descendente según la fecha, pero por alguna razón, solo ordena la matriz en orden descendente.
let res = [ ['03-01-2019', 'Test 3'], ['03-01-2020', 'Test 1'], ['03-01-2021', 'Test 2'] ]; const toDate = (dateStr) => { const [month, day, year] = dateStr.split("-") return new Date(year, month - 1, day) } let SortedDefault = res; //default array value, no sorting has been done. let SortedAscDate = res.sort(function (a, b) { return toDate(a[0]) - toDate(b[0]) }); //sort array in asc order let SortedDescDate = res.sort(function (a, b) { return toDate(b[0]) - toDate(a[0]) }); //sort array in desc order document.getElementById("default").innerHTML = SortedDefault; document.getElementById("asc").innerHTML = SortedAscDate; document.getElementById("desc").innerHTML = SortedDescDate; <p id="default"></p> <p id="asc"></p> <p id="desc"></p>Esperaba los siguientes resultados;
03-01-2019,Test 3,03-01-2020,Test 1,03-01-2021,Test 2 //original, no sorting has been done. 03-01-2019,Test 3,03-01-2020,Test 1,03-01-2021,Test 2 //sort in asc order 03-01-2021,Test 2,03-01-2020,Test 1,03-01-2019,Test 3 //sort in des orderEn cambio, obtuve esto (los tres están descendiendo???);
03-01-2021,Test 2,03-01-2020,Test 1,03-01-2019,Test 3 //original, no sorting has been done (but how can it sorted in des order?) 03-01-2021,Test 2,03-01-2020,Test 1,03-01-2019,Test 3 //sort in asc, but it has been sort in desc order 03-01-2021,Test 2,03-01-2020,Test 1,03-01-2019,Test 3 //sort in des order, correct result.El método sort ordena los elementos de una matriz en su lugar.
Utilice res.slice().sort(...)
.sort() muta la matriz principal. Para superar, puede usar una copia electrónica [...res] para ordenar como
let SortedAscDate = [...res].sort(function(a, b) { return toDate(a[0]) - toDate(b[0]) }) let res = [ ['03-01-2019', 'Test 3'], ['03-01-2020', 'Test 1'], ['03-01-2021', 'Test 2'] ]; const toDate = (dateStr) => { const [month, day, year] = dateStr.split("-") return new Date(year, month - 1, day) } let SortedDefault = res; //default array value, no sorting has been done. let SortedAscDate = [...res].sort(function(a, b) { return toDate(a[0]) - toDate(b[0]) }); //sort array in asc order let SortedDescDate = [...res].sort(function(a, b) { return toDate(b[0]) - toDate(a[0]) }); //sort array in desc order document.getElementById("default").innerHTML = SortedDefault; document.getElementById("asc").innerHTML = SortedAscDate; document.getElementById("desc").innerHTML = SortedDescDate; <p id="default"></p> <p id="asc"></p> <p id="desc"></p>