2013-01-08 92 views
16

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

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

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

+0

这篇文章会帮助你如何做到这一点,http://stackoverflow.com/questions/881510/json-sorting-in-jquery – Adil

+0

尝试masterList.sort() –

回答

44

JavaScript对象有没有秩序。即使大多数浏览器按照相同顺序迭代创建属性,但并不能保证,因此排序不支持对象。

这里看到更多的信息:Does JavaScript Guarantee Object Property Order?

您可能也有对此事的兴趣是什么John Resig has got to say


如果需要排序能名单,你就必须把它存储为对象的数组:

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/

+0

非常感谢你 – r1webs

+0

也许我只是不'不明白sort(),但这不适用于数值。尝试按'键'进行排序会返回未定义的函数。 – dval

+1

@dval - 这是'localeCompare'将你扔掉。如果你使用'key'进行排序,那么只需'return a - b'。 –

5
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()); 

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

+0

这个解决方案的唯一问题是你错过了关键值结果数组 – AXL