Javascript基于值对键值对象进行排序

r1w*_*ebs 20 javascript jquery

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

    var masterList = {
    "1": "google",
    "2": "yahoo",
    "3": "msn",
    "4": "stackoverflow",
    "5": "github",
    "6": "jsfiddle",
    "7": "amazon",
    "8": "ebay"
}
Run Code Online (Sandbox Code Playgroud)

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

Jos*_*ber 55

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" }
];
Run Code Online (Sandbox Code Playgroud)

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

masterList = masterList.sort(function (a, b) {
    return a.val.localeCompare( b.val );
});
Run Code Online (Sandbox Code Playgroud)

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

  • @dval - 这是让你失望的`localeCompare`.如果你按`key`排序,那么只需`return a - b`. (3认同)
  • @FinbarMaginn - `list = list.sort(function(a,b){return a.val - b.val;});` (3认同)

小智 7

    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());
Run Code Online (Sandbox Code Playgroud)

这将按升序对您的值进行排序.让我给一些时候会回复你如何将其转换为对象.