Я пытаюсь написать вспомогательную функцию в JavaScript, которая принимает несортированный массив объектов и массив полей и сортирует массив на месте на основе заданных полей. Вот что у меня есть:
const sortByFieldsInPlace = (arr, fieldNames) => {
arr.sort((a, b) => {
for (const field of fieldNames) {
if (a[field] > b[field]) return 1;
if (a[field] < b[field]) return -1;
}
});
};
Кажется, что пока работает:
const arr1 = [
{ name: 'A', code: 'D' },
{ name: 'B', code: 'A' },
{ name: 'A', code: 'Z' },
{ name: 'A', code: 'A' },
{ name: 'B', code: 'D' },
{ name: 'B', code: 'B' },
{ name: 'B', code: 'B' }
];
sortByFieldsInPlace(arr1, ['name', 'code'])
console.log(arr1)
// [
// { name: 'A', code: 'A' },
// { name: 'A', code: 'D' },
// { name: 'A', code: 'Z' },
// { name: 'B', code: 'A' },
// { name: 'B', code: 'B' },
// { name: 'B', code: 'B' },
// { name: 'B', code: 'D' }
// ]
const arr2 = [
{ name: 'A', code: 'D' },
{ name: 'B', code: 'A' },
{ name: 'A', code: 'Z' },
{ name: 'A', code: 'A' },
{ name: 'B', code: 'D' },
{ name: 'B', code: 'B', status: 10 },
{ name: 'B', code: 'B', status: 9 }
];
sortByFieldsInPlace(arr2, ['name', 'code', 'status'])
console.log(arr2)
// [
// { name: 'A', code: 'A' },
// { name: 'A', code: 'D' },
// { name: 'A', code: 'Z' },
// { name: 'B', code: 'A' },
// { name: 'B', code: 'B', status: 9 },
// { name: 'B', code: 'B', status: 10 },
// { name: 'B', code: 'D' }
// ]
Это выглядит хорошо или у кого-нибудь есть лучшее решение?