Tengo un objeto (no una matriz):
var people = {}; people['Zanny'] = {date: 447, last: 'Smith'}; people['Nancy'] = {date: 947, last: 'William'}; people['Jen'] = {date: 147, last: 'Roberts'}; A diferencia de esta pregunta de clasificación genérica , necesito especificar el valor de la subclave para clasificar, en este caso: date . En aras de la simplicidad, eliminé los primeros siete dígitos de las fechas, ya que eso no es importante.
Después de la clasificación, el objeto debe clasificarse por los valores de la clave de date de la siguiente manera:
people['Jen'] = {date: 147, last: 'Roberts'};//147 is the lowest/first value. people['Zanny'] = {date: 447, last: 'Smith'}; people['Nancy'] = {date: 947, last: 'William'};//947 is the highest/last value. Necesito crear una función nombrada no anónima reutilizable con dos parámetros obvios: el object y la key cuyo valor se basa la clasificación. He pasado algún tiempo tratando de experimentar con lo siguiente sin ningún éxito todavía:
function array_sort_by_values(o, k) { return Object.entries(o).sort().reduce(function (result, key) { //console.log(result,key); result[key][k] = o[key][k]; return result; }, {}); }o.sort ya que es para tipos de matrices (aunque JavaScript afirma que todo es un objeto y que las "matrices" no existen).¿Qué hay de convertir un objeto en una matriz para ordenar y volver a convertir?
var people = {}; people['Zanny'] = {date: 447, last: 'Smith'}; people['Nancy'] = {date: 947, last: 'William'}; people['Jen'] = {date: 147, last: 'Roberts'}; console.log(Object.fromEntries(Object.entries(people).sort((a,b) => { return a[1].date - b[1].date }))) var people = {}; people['Zanny'] = {date: 447, last: 'Smith'}; people['Nancy'] = {date: 947, last: 'William'}; people['Jen'] = {date: 147, last: 'Roberts'}; console.log(Object.fromEntries(Object.entries(people).sort(([,a],[,b]) => { return a.date - b.date })))Como una función nombrada:
function array_sort_by_values(o, k) { return Object.fromEntries(Object.entries(o).sort((a,b) => {return a[1][k] - b[1][k]})); }Para mantener los cambios en vigor, el objeto debe reasignarse:
people = array_sort_by_values(people, 'date'); console.log(people); array_sort_by_values(people, 'last') console.log(people);