у меня есть этот массив
let arr = [
{
"time": "3",
"wholeObj": "abc mo sa 3 Y",
"mapEventValue": "Y"
},
{
"time": "3",
"wholeObj": "abc a 3 G",
"mapEventValue": "G"
},
{
"time": "3",
"wholeObj": "cba d 3 S f",
"mapEventValue": "S"
},
{
"time": "3",
"wholeObj": "cba z 3 R",
"mapEventValue": "R"
}
]
мне нужно отсортировать массив ПЕРВЫМ на основе значения time, а после этого, если значения времени равны, мне нужно отсортировать их на основе mapEventValue
в следующем порядке G Y R S
Итак, в моем случае все объекты имеют одинаковые значения времени 3 Я не могу найти способ отсортировать их по свойству mapEventValue
что я пробовал
До сих пор мне просто удавалось сортировать их по времени
пусть sorted = arr.sort((a,b) => a.time - b.time)
Итак, мой вывод в конце должен быть
let arr = [
{
"time": "3",
"wholeObj": "abc a 3 G",
"mapEventValue": "G"
},
{
"time": "3",
"wholeObj": "abc mo sa 3 Y",
"mapEventValue": "Y"
},
{
"time": "3",
"wholeObj": "cba z 3 R",
"mapEventValue": "R"
},
{
"time": "3",
"wholeObj": "cba d 3 S f",
"mapEventValue": "S"
},
]
Отвечает ли это на ваш вопрос? Как отсортировать массив объектов по нескольким полям?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Так что сортируйте только по time, если time отличается, в противном случае сортируйте по индексу желаемого порядка сортировки.
let sortOrder = 'GYRS';
let arr = [
{
"time": "3",
"wholeObj": "abc mo sa 3 Y",
"mapEventValue": "Y"
},
{
"time": "3",
"wholeObj": "abc a 3 G",
"mapEventValue": "G"
},
{
"time": "3",
"wholeObj": "cba d 3 S f",
"mapEventValue": "S"
},
{
"time": "3",
"wholeObj": "cba z 3 R",
"mapEventValue": "R"
}
];
let sorted = arr.sort((a,b) => {
if (a.time != b.time) {
return a.time - b.time;
} else {
return sortOrder.indexOf(a.mapEventValue) - sortOrder.indexOf(b.mapEventValue);
}
});
console.info(sorted);
Поэтому сначала проверьте, является ли
a.time == b.time, и если да, вместо этого укажите возвращаемое значение на основе вашего второго критерия сортировки...