Javascript基于值对键值对对象进行排序
我有一个像下面这样的物体。尝试根据值按升序重新排列。类似于Javascript数组排序方法Javascript基于值对键值对对象进行排序,javascript,jquery,Javascript,Jquery,我有一个像下面这样的物体。尝试根据值按升序重新排列。类似于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对象没有顺序。即使大多数浏览器确实按照创建属性的相同顺序进行迭代,也无法保证,因此对象不支持排序 有关更多信息,请参见此处: 你可能也会对这件事感兴趣
如果需要可排序列表,则必须将其存储为对象数组:
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 );
});
这是小提琴:
var obj={
“1”:“谷歌”,
“2”:“雅虎”,
“3”:“msn”,
“4”:“stackoverflow”,
“5”:“github”,
“6”:“jsfiddle”,
“7”:“亚马逊”,
“8”:“易趣”
};
var-arr=[];
for(obj中的var键){
if(对象hasOwnProperty(键)){
arr.push(对象[键]);
}
}
警报(arr.sort())代码>
var主列表={
“2”:“雅虎”,
“3”:“msn”,
“4”:“stackoverflow”,
“5”:“github”,
“6”:“jsfiddle”,
“7”:“亚马逊”,
“8”:“易趣”,
“1”:“谷歌”,
}
var主列表{}
Object.keys(masterList.sort().forEach(a=>masterList\uUa]=masterList[a])
console.log(masterList)
这篇文章将帮助您完成这项工作,也许我只是不懂sort(),但这对数值不起作用。试图按“键”排序会返回未定义的函数。@dval-是localeCompare
使您感到厌烦。如果您是按键进行排序
,那么只需返回a-b
@Joseph Silber啊!完美的谢谢。类似于@dval的问题,我如何对值(而不是键)进行数字排序?我的数组看起来与此类似<代码>[{key:“Designer”,val:0},{key:“Developer”,val:2},{key:“Engineer”,val:1}]
@finbarmagin-list=list.sort(函数(a,b){返回a.val-b.val;})代码>此解决方案的唯一问题是缺少结果数组中的键值