У меня ниже array
из objects
в javascript
[
{'name' : 'Ram', 'age': 10 , 'city' : 'a'},
{'name' : 'Shyam', 'age': 5 , 'city' : 'a'},
{'name' : 'Aditya', 'age': 10 , 'city' : 'b'},
{'name' : 'Aditya', 'age': 5 , 'city' : 'a'}]
Теперь мне нужно применить вложенную сортировку.
Пользователь может отсортировать вышеуказанную коллекцию поимя, возраст, город.
Предположим, что пользователь запрашивает сортировку по имени, отсортированный массив будет выглядеть одинаково.
[
{'name' : 'Aditya', 'age': 5 , 'city' : 'a'},
{'name' : 'Aditya', 'age': 10 , 'city' : 'b'}
{'name' : 'Mohan', 'age': 50 , 'city' : 'b'}
{'name' : 'Ram', 'age': 10 , 'city' : 'a'}]
Теперь пользователь нажимает для сортировки по возрасту (asc), но этоне должен мешать вышеуказанному массиву.
Он должен выглядеть одинаково
[
{'name' : 'Aditya', 'age': 5 , 'city' : 'a'},
{'name' : 'Aditya', 'age': 10 , 'city' : 'b'}
{'name' : 'Ram', 'age': 10 , 'city' : 'a'},
{'name' : 'Shyam', 'age': 5 , 'city' : 'a'}]
Но если предположить, что пользователь просит отсортировать сортировку выше по возрасту, чтобы он выглядел одинаково
[
{'name' : 'Aditya', 'age': 10 , 'city' : 'a'},
{'name' : 'Aditya', 'age': 5 , 'city' : 'b'}
{'name' : 'Ram', 'age': 10 , 'city' : 'a'},
{'name' : 'Shyam', 'age': 5 , 'city' : 'a'}
Вот так выглядит моя текущая функция сортировки.
let compareObjects = (key, order = 'asc') => {
return function (a, b) {
if (!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) {
// property doesn't exist on either object
return 0;
}
const varA = (typeof a[key] === 'string') ?
a[key].toUpperCase() : a[key];
const varB = (typeof b[key] === 'string') ?
b[key].toUpperCase() : b[key];
let comparison = 0;
if (varA > varB) {
comparison = 1;
} else if (varA < varB) {
comparison = -1;
}
return (
(order == 'desc') ? (comparison * -1) : comparison
);
}}
arrOfObjects.sort(compareObjects('age'));
Но я понятия не имею, как применить вложенную сортировку?
Спасибо!