桃花長相依
2019-05-25 16:41:41
按屬性值排序JavaScript對(duì)象如果我有一個(gè)JavaScript對(duì)象,例如:var list = {
"you": 100,
"me": 75,
"foo": 116,
"bar": 15};有沒有辦法根據(jù)值對(duì)屬性進(jìn)行排序?所以我最終得到了list = {
"bar": 15,
"me": 75,
"you": 100,
"foo": 116};
4 回答

慕哥9229398
TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超6個(gè)贊
將它們移動(dòng)到一個(gè)數(shù)組,對(duì)該數(shù)組進(jìn)行排序,然后將該數(shù)組用于您的目的。這是一個(gè)解決方案:
var maxSpeed = { car: 300, bike: 60, motorbike: 200, airplane: 1000, helicopter: 400, rocket: 8 * 60 * 60};var 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]]
一旦擁有了數(shù)組,就可以按照自己喜歡的順序從數(shù)組中重建對(duì)象,從而實(shí)現(xiàn)您的目標(biāo)。這可以在我所知道的所有瀏覽器中工作,但它將依賴于實(shí)現(xiàn)的怪癖,并且可能隨時(shí)中斷。您永遠(yuǎn)不應(yīng)該假設(shè)JavaScript對(duì)象中元素的順序。

飲歌長嘯
TA貢獻(xiàn)1951條經(jīng)驗(yàn) 獲得超3個(gè)贊
為了完整起見,此函數(shù)返回已排序的對(duì)象屬性數(shù)組:
function sortObject(obj) { var arr = []; for (var prop in obj) { if (obj.hasOwnProperty(prop)) { arr.push({ 'key': prop, 'value': obj[prop] }); } } arr.sort(function(a, b) { return a.value - b.value; }); //arr.sort(function(a, b) { a.value.toLowerCase().localeCompare(b.value.toLowerCase()); }); //use this to sort as strings return arr; // returns array}var list = {"you": 100, "me": 75, "foo": 116, "bar": 15};var arr = sortObject(list);console.log(arr); // [{key:"bar", value:15}, {key:"me", value:75}, {key:"you", value:100}, {key:"foo", value:116}]
以上代碼的Jsfiddle就在這里。此解決方案基于本文。
這里有用于排序字符串的更新小提琴。您可以從中刪除其他.toLowerCase()轉(zhuǎn)換,以進(jìn)行區(qū)分大小寫的字符串比較。
添加回答
舉報(bào)
0/150
提交
取消