Tengo el siguiente código, que parece estar haciendo lo correcto, pero cuando registro el objeto de matriz, nunca cambia:
let data = [ {'country': 'AB', 'state': 'DE'}, {'country': 'US', 'state': 'CA'}, {'country': 'AB', 'state': 'DE'}, {'country': 'US', 'state': 'MI'}, {'country': 'RU', 'state': null} ]; function sortFunc(a, b) { let val = a['country'] < b['country']; console.log(a['country'], b['country'], val); return +val; } data.sort(sortFunc); console.log(data);¿Cuál es el problema con el código anterior?
La función de sort debe ir en ambos sentidos y devolver 0 si es igual o -1 o 1 ; la función anterior solo devuelve 1 o 0 . Aquí sería una versión adecuada:
let data = [ {'country': 'AB', 'state': 'DE'}, {'country': 'US', 'state': 'CA'}, {'country': 'AB', 'state': 'DE'}, {'country': 'US', 'state': 'MI'}, {'country': 'RU', 'state': null} ]; function sortFunc(_a, _b) { let [a,b] = [_a['country'], _b['country']]; if (a===b) return 0; else if (a>b) return 1; else return -1; } data.sort(sortFunc); console.log(data);No sé si desea ordenarlo en forma ascendente o descendente, así que descúbralo usted mismo con el operador ternario. Descansa, supongo que está funcionando como esperas.
let data = [ {'country': 'AB', 'state': 'DE'}, {'country': 'US', 'state': 'CA'}, {'country': 'AB', 'state': 'DE'}, {'country': 'US', 'state': 'MI'}, {'country': 'RU', 'state': null} ]; function sortFunc(a, b) { return a['country'] < b['country']?1:-1; } data = data.sort(sortFunc); console.log(data);