28

我有一个像下面这样的对象。尝试根据值按升序重新排列它。类似于 Javascript 数组排序方法。

    var masterList = {
    "1": "google",
    "2": "yahoo",
    "3": "msn",
    "4": "stackoverflow",
    "5": "github",
    "6": "jsfiddle",
    "7": "amazon",
    "8": "ebay"
}

请让我知道更好的解决方案...

4

3 回答 3

59

JavaScript 对象没有顺序。尽管大多数浏览器确实以创建属性的相同顺序进行迭代,但不能保证,因此对象不支持排序。

有关更多信息,请参见此处:JavaScript 保证对象属性顺序吗?

您可能还对John Resig对此事的看法感兴趣。


如果您需要一个可排序的列表,则必须将其存储为对象数组:

var masterList = [
    { key: 1, val: "google" },
    { key: 2, val: "yahoo" },
    { key: 3, val: "msn" },
    { key: 4, val: "stackoverflow" },
    { key: 5, val: "github" },
    { key: 6, val: "jsfiddle" },
    { key: 7, val: "amazon" },
    { key: 8, val: "ebay" }
];

然后,对它们进行排序,只需使用常规数组的sort方法:

masterList = masterList.sort(function (a, b) {
    return a.val.localeCompare( b.val );
});

这是小提琴:http: //jsfiddle.net/ASrUD/

于 2013-01-08T05:21:18.030 回答
8

    var obj = {
        "1": "google",
        "2": "yahoo",
        "3": "msn",
        "4": "stackoverflow",
        "5": "github",
        "6": "jsfiddle",
        "7": "amazon",
        "8": "ebay"
    };

    var arr = [];

    for (var key in obj) {
        if (obj.hasOwnProperty(key)) {
            arr.push(obj[key]);
        }
    }
    
    alert(arr.sort());

这将按升序对您的值进行排序。让我给你一些时间会告诉你如何将它转换为一个对象。

于 2013-01-08T06:05:12.043 回答
0

var masterList = {
    "2": "yahoo",
    "3": "msn",
    "4": "stackoverflow",
    "5": "github",
    "6": "jsfiddle",
    "7": "amazon",
    "8": "ebay",
    "1": "google",
   }
var masterList_ = {}

Object.keys(masterList).sort().forEach(a=>masterList_[a]=masterList[a])
console.log(masterList_)

于 2020-08-10T12:41:19.473 回答