Отсортировать объект по алфавиту, чтобы определённый ключ был последним
Есть объект
let json = {
"Благодарственное письмо": {},
"Почётная грамота": {},
"Благодарность": {},
"Грамота": {},
"Другое": {},
"Похвальный лист": {},
"Диплом": {}
};
for(let key in json) {
$('body').append('<div>'+key+'</div>');
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Как вывести его так, чтобы ключ "Другое" был последним, а остальное отсортировано в алфавитном порядке?
Глупая идея
let json = {
"Благодарственное письмо": {},
"Почётная грамота": {},
"Благодарность": {},
"Грамота": {},
"Другое": {},
"Похвальный лист": {},
"Диплом": {}
};
let sort = [];
for(let key in json) {
sort.push(key);
}
sort.sort();
sort.splice(sort.indexOf("Другое"),1)
sort.push("Другое");
for(let key in sort) {
$('body').append('<div>'+sort[key]+'</div>');
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Ответы (1 шт):
Автор решения: NoSkill
→ Ссылка
Здесь вам придется сортировать по ключу и использовать кастомную функцию сравнения:
function customSort(obj, lastkey) {
let res = {};
Object.keys(obj).sort(function(a, b) {
return a == lastkey ? true : b == lastkey ? false : a > b;
}).forEach(function(key) {
res[key] = obj[key];
});
return res;
}
let json = {
"Благодарственное письмо": {},
"Почётная грамота": {},
"Благодарность": {},
"Грамота": {},
"Другое": {},
"Похвальный лист": {},
"Диплом": {}
};
json = customSort(json, "Другое");
console.log(json);