Я недавно столкнулся с этой проблемой и нашел этот вопрос. Я был разочарован, обнаружив, что не было заранее определенного способа сортировки ассоциативного массива, но он имел смысл и указывал мне правильное направление. Я не до конца осознавал, что в JS ассоциативные массивы на самом деле являются объектами и являются только массивами по названию. У меня был ассоциативный массив, который содержал больше ассоциативных массивов, например:
var firstChild = {'id': 0, 'name': 'company Two'};
var secondChild = {'id': 1, 'name': 'company One'};
var parent = {
'company Two': firstChild,
'company One': secondChild
};
Следующая функция отсортирует вышеприведенный родительский массив на основе его ключей. Чтобы это работало как написано, родительскому массиву нужны ключи, которые соответствуют значению в соответствующем массиве. Например, у родителя ['уникальная строка'] должно быть какое-то ключевое значение, которое содержит значение 'уникальной строки'. В моем случае это имя ключа; однако вы можете выбрать любую понравившуюся клавишу.
function associativeSort(givenArray, keyToSort) {
var results = [];
var temp = [];
for(var key in givenArray) {
temp.push(givenArray[key].name);
}
temp = temp.sort();
for(var x = 0; x < temp.length; x++) {
results[x] = givenArray[temp[x]];
}
return results;
}
Учитывая мой пример массива, эта функция вернет:
var parent = {
'company One': {'id': 1, 'name': 'company One'},
'company Two': {'id': 0, 'name': 'company Two'}
};
Это простое решение, но мне потребовалось некоторое время, чтобы подумать. Надеюсь, что это помогает другим, сталкивающимся с этой проблемой.