TransWikia.com

Отсортировать объект по алфавиту, чтобы определённый ключ был последним

Stack Overflow на русском Asked by De.Minov on December 22, 2021

Есть объект

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>

One Answer

Здесь вам придется сортировать по ключу и использовать кастомную функцию сравнения:

    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);

Answered by NoSkill on December 22, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP