Jak seřadit literál objektu JS?

Pokud mám tento objekt JS doslovný:

var foo = {
    Sussy: 4,
    Billy: 5,
    Jimmy: 2,
    Sally: 1
};

Jak mohu vytvořit nový, seřazený objektový literál:

var bar = {
    Sally: 1,
    Jimmy: 2,
    Sussy: 4,
    Billy: 5
};

Odpověď

Re:Jak seřadit objekt JS?

Odpověď:Nemůžete. Místo toho tedy potřebujete sofistikovanější datovou strukturu. Máte mnoho možností:

  1. Můžete použít samostatné pole k udržení pořadí klíčů objektu. (Toto ukazuje odpověď @Felix Kling.) Dobré:rychlé vyhledání prostřednictvím objednávky nebo jména. Špatný:potřebuje druhou datovou strukturu, která musí být synchronizována s první.
  2. Namísto toho, aby objekt obsahoval pouze vlastnosti a hodnoty, mohou vlastnosti obsahovat objekty, které obsahují hodnoty a pořadí řazení. Dobrý:1 datová struktura. Rychlé vyhledávání podle názvu vlastnosti. Špatné:pomalé vyhledávání podle objednávky (je třeba naskenovat strukturu). Pomalé řazení.
  3. Použijte pole s prvky sestávajícími z objektů, které obsahují klíč a hodnotu. Dobrý:1 datová struktura. Rychlé vyhledání dle objednávky. Rychlé řazení. Špatné:pomalé vyhledávání podle názvu vlastnosti (potřeba prohledat strukturu).

Doporučuji řešení 3, protože ke správě objednávání používá mechaniku JS.

Příklady:

// Object holds sort order:  (Solution 2)
var foo = {
  Suzy: {v: 4, order: 0},
  Billy: {v: 5, order: 1},
  Jimmy: {v: 2, order: 2},
  Sally: {v: 1, order: 3}
};    

// Array holds keys: (Solution 3)
var woof = [
  {k: 'Suzy', v: 4},
  {k: 'Billy', v: 5},
  {k: 'Jimmy', v: 2},
  {k: 'Sally', v: 1}
];

// Sort the woof array by the key names:
woof.sort(function(a, b) {
  return a.k.localeCompare(b.k);
});

// The third key and value:
woof[2].k; // the third key
woof[2].v; // the third value

Upraveno:aktualizovaný kód pro opravu překlepu. Děkuji, @Martin Fido