如果我有一個 JavaScript 對象,例如:
var list = { "you": 100, "me": 75, "foo": 116, "bar": 15 };
有沒有辦法根據值對屬性進行排序?所以我最終得到
list = { "bar": 15, "me": 75, "you": 100, "foo": 116 };
我們不想複製整個資料結構,或在需要關聯數組的地方使用陣列。
這裡有另一種方法可以做與 bonna 相同的事情:
var list = {"you": 100, "me": 75, "foo": 116, "bar": 15}; keysSorted = Object.keys(list).sort(function(a,b){return list[a]-list[b]}) console.log(keysSorted); // bar,me,you,foo
將它們移到一個陣列中,對該陣列進行排序,然後將該陣列用於您的目的。解決辦法如下:
let maxSpeed = { car: 300, bike: 60, motorbike: 200, airplane: 1000, helicopter: 400, rocket: 8 * 60 * 60 }; let sortable = []; for (var vehicle in maxSpeed) { sortable.push([vehicle, maxSpeed[vehicle]]); } sortable.sort(function(a, b) { return a[1] - b[1]; }); // [["bike", 60], ["motorbike", 200], ["car", 300], // ["helicopter", 400], ["airplane", 1000], ["rocket", 28800]]
一旦獲得了數組,您就可以按照您喜歡的順序從數組中重建對象,從而完全實現您想要做的事情。這適用於我所知道的所有瀏覽器,但它取決於實現的怪癖,並且可能隨時中斷。您永遠不應該對 JavaScript 物件中元素的順序做出假設。
let objSorted = {} sortable.forEach(function(item){ objSorted[item[0]]=item[1] })
在 ES8 中,您可以使用 Object.entries() 將物件轉換為陣列:
Object.entries()
const maxSpeed = { car: 300, bike: 60, motorbike: 200, airplane: 1000, helicopter: 400, rocket: 8 * 60 * 60 }; const sortable = Object.entries(maxSpeed) .sort(([,a],[,b]) => a-b) .reduce((r, [k, v]) => ({ ...r, [k]: v }), {}); console.log(sortable);
我們不想複製整個資料結構,或在需要關聯數組的地方使用陣列。
這裡有另一種方法可以做與 bonna 相同的事情:
將它們移到一個陣列中,對該陣列進行排序,然後將該陣列用於您的目的。解決辦法如下:
一旦獲得了數組,您就可以按照您喜歡的順序從數組中重建對象,從而完全實現您想要做的事情。這適用於我所知道的所有瀏覽器,但它取決於實現的怪癖,並且可能隨時中斷。您永遠不應該對 JavaScript 物件中元素的順序做出假設。
在 ES8 中,您可以使用
Object.entries()
將物件轉換為陣列: