у меня есть массив объектов, что-то вроде этогоСортировка Javascript массив несколькими ключами
var itemArray = [
{
"name": "name1",
"flag": true,
},
{
"name": "name1",
"flag": false,
},
{
"name": "name2",
"flag": false,
},
{
"name": "name3",
"flag": true,
}
];
Я уже сортировочного это с помощью ключа имя с помощью следующего:
var sortedItems = sortByKey(itemArray, "name");
function sortByKey(array, key) {
return array.sort(function(a, b) {
var x = a[key];
var y = b[key];
return ((x < y) ? -1 : ((x > y) ? 1 : 0));
});
Как я также сортировать это по ключу флага в алфавитном порядке, чтобы ложные флаги отображались перед истинными флагами? (Я могу использовать строку вместо булева на свойстве флага, если это делает его проще)
Чтобы уточнить, что я ищу, это массив, который будет возвращен, как это, например:
[
{ name: "name_a", flag: false },
{ name: "name_a", flag: true },
{ name: "name_b", flag: false },
{ name: "name_b", flag: true},
{ name: "name_c", flag: true},
{ name: "name_d", flag: false},
]
Логик проста: в функции сравнения вы в первый раз первичное сравнения, если это * не равен *, вы возвращаете результат сравнения, в противном случае вы делаете свое второстепенное сравнение и возвращаете результат. – deceze
Возможный дубликат [Javascript, как вы сортируете массив по нескольким столбцам?] (Http://stackoverflow.com/questions/2784230/javascript-how-do-you-sort-an-array-on-multiple-columns) – Kld