Главное, чтобы ваш код ожидал, что path будет функцией, которая выбирает значение свойства вместо строки, указывающей на имя свойства. Таким образом, это намного более гибко.
const sortColumn = {
path: p => p.other.age,
order: 'desc'
};
Однако, если «индивидуумы» - не единственный объект, с которым вы хотите это сделать, вы можете дополнительно абстрагировать такую функцию для общего использования с любым массивом, например, таким:
function sorter (array, path, order) {
array.sort((a,b) => {
let result =
path(a) > path(b) ? 1
: path(a) < path(b) ? -1
: 0;
if (order === "desc")
result = -result;
return result;
});
}
Используйте это так:
sorter(persons, p => p.other.age, 'desc');
Разверните и запустите приведенный ниже фрагмент, чтобы увидеть его в действии:
function sorter (array, path, order) {
array.sort((a,b) => {
let result =
path(a) > path(b) ? 1
: path(a) < path(b) ? -1
: 0;
if (order === "desc")
result = -result;
return result;
});
}
const persons = [
{name: "alireza", family: "seif", other: {age: 28, rate: 30}},
{name: "sara", family: "niki", other: {age: 15, rate: 15}},
{name: "fateme", family: "azizy", other: {age: 27, rate: 35}}
];
// convenience function
let sortAndLog = (array, path, order) => {
sorter(array, path, order);
console.log(array.map(path));
}
sortAndLog(persons, p => p.name, "asc");
sortAndLog(persons, p => p.name, "desc");
sortAndLog(persons, p => p.other.age, "asc");
sortAndLog(persons, p => p.other.age, "desc");