簡體   English   中英

如何對 JS Object 文字進行排序?

[英]How to Sort a JS Object Literal?

如果我有這個 JS object 文字:

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

如何創建一個新的、排序的 object 文字:

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

回復:如何對 JS Object 進行排序?

回答:你不能。 因此,您需要一個更復雜的數據結構。 你有很多選擇:

  1. 您可以使用單獨的數組來保存對象鍵的順序。 (這就是@Felix Kling 的回答所證明的。) 好:通過訂單或名稱快速檢索。 壞:需要第二個必須與第一個保持同步的數據結構。
  2. 與簡單地保存屬性和值的 Object 不同,屬性可以保存保存值和排序順序的對象。 好:1個數據結構。 按屬性名稱快速查找。 不好:按順序查找慢(需要掃描結構)。 分揀慢。
  3. 使用數組,其元素由包含鍵和值的對象組成。 好:1個數據結構。 按訂單快速查找。 快速排序。 不好:按屬性名稱查找緩慢(需要掃描結構)。

我推薦解決方案 3,因為它使用 JS 機制來管理排序。

例子:

// 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

已編輯:更新代碼以修復錯字。 謝謝你,@Martin Fido

Object 屬性沒有特定順序(順序取決於實現),您無法對屬性進行排序。

您必須保留一組鍵並相應地對其進行排序,例如:

var keys = [];

for(var key in obj) {
    if(obj.hasOwnProperty(key)) {
        keys.push(key);
    }
}

keys.sort(function(a, b) {
    return obj[a] - obj[b];
});

現在您可以遍歷數組的值並使用它們來訪問 object 的相應屬性。

事實證明,自 ES2015 以來,object 的屬性順序是可以預測的。 這是驚人的。

在這里查看。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM