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í:
- 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í.
- 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í.
- 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