我有一个如下的对象。试图按值的大小重新排列它,类似于JavaScript中的数组排序方法。
var masterList = {
"1": "google",
"2": "yahoo",
"3": "msn",
"4": "stackoverflow",
"5": "github",
"6": "jsfiddle",
"7": "amazon",
"8": "ebay"
}
请告诉我更好的解决方案...
我有一个如下的对象。试图按值的大小重新排列它,类似于JavaScript中的数组排序方法。
var masterList = {
"1": "google",
"2": "yahoo",
"3": "msn",
"4": "stackoverflow",
"5": "github",
"6": "jsfiddle",
"7": "amazon",
"8": "ebay"
}
请告诉我更好的解决方案...
JavaScript对象没有顺序。尽管大多数浏览器按照属性创建的顺序迭代,但没有保证,因此不支持排序对象。
更多信息请参见: Does JavaScript Guarantee Object Property Order?
您可能还对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 );
});
这里是fiddle代码示例:http://jsfiddle.net/ASrUD/
[ {key:"设计师", val:0}, {key:"开发人员", val:2}, {key:"工程师", val:1} ]
- Finbar Maginnlist = list.sort(function(a, b){ return a.val - b.val; });
- Joseph Silberlist = obj.sort(function (a, b) {
return a - b;
});
console.log(list)
输出结果
4
{ loc1: 5, loc2: 3, loc3: 1, loc4: 2 }
[ [ 'loc1', 5 ], [ 'loc2', 3 ], [ 'loc3', 1 ], [ 'loc4', 2 ] ]
[ [ 'loc1', 5 ], [ 'loc2', 3 ], [ 'loc3', 1 ], [ 'loc4', 2 ] ] - SudhirKumar 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());
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_)