Cómo ordenar una matriz de objetos en JavaScript
Para ordenar una matriz de objetos en JavaScript, puedes utilizar el método Array.prototype.sort()
y el método Array.prototype.reduce()
en la matriz props
con un valor predeterminado de 0
.
A continuación, hay una función de ejemplo, orderBy
, que ordena una matriz de objetos según las propiedades y órdenes especificadas:
const orderBy = (arr, props, orders = ["asc"]) =>
[...arr].sort((a, b) =>
props.reduce((acc, prop, i) => {
if (acc === 0) {
const [p1, p2] =
orders[i] === "desc" ? [b[prop], a[prop]] : [a[prop], b[prop]];
acc = p1 > p2 ? 1 : p1 < p2 ? -1 : 0;
}
return acc;
}, 0)
);
Para utilizar esta función, pasa una matriz de objetos, una matriz de propiedades por las que ordenar y una matriz opcional de órdenes. Si no se proporciona una matriz orders
, la función ordenará por 'asc'
por defecto.
A continuación, hay algunos ejemplos de cómo utilizar la función orderBy
:
const users = [
{ name: "fred", age: 48 },
{ name: "barney", age: 36 },
{ name: "fred", age: 40 }
];
// ordenar por nombre ascendente y edad descendente
orderBy(users, ["name", "age"], ["asc", "desc"]);
// Salida: [{name: 'barney', age: 36}, {name: 'fred', age: 48}, {name: 'fred', age: 40}]
// ordenar por nombre ascendente y edad ascendente (orden predeterminado)
orderBy(users, ["name", "age"]);
// Salida: [{name: 'barney', age: 36}, {name: 'fred', age: 40}, {name: 'fred', age: 48}]