按属性值排序JavaScript对象如果我有一个JavaScript对象,例如:var list = {
"you": 100,
"me": 75,
"foo": 116,
"bar": 15};有没有办法根据值对属性进行排序?所以我最终得到了list = {
"bar": 15,
"me": 75,
"you": 100,
"foo": 116};
4 回答
慕哥9229398
TA贡献1877条经验 获得超6个赞
将它们移动到一个数组,对该数组进行排序,然后将该数组用于您的目的。这是一个解决方案:
var maxSpeed = { car: 300, bike: 60, motorbike: 200, airplane: 1000, helicopter: 400, rocket: 8 * 60 * 60};var sortable = [];for (var vehicle in maxSpeed) { sortable.push([vehicle, maxSpeed[vehicle]]);}sortable.sort(function(a, b) { return a[1] - b[1];});//[["bike", 60], ["motorbike", 200], ["car", 300],//["helicopter", 400], ["airplane", 1000], ["rocket", 28800]]
一旦拥有了数组,就可以按照自己喜欢的顺序从数组中重建对象,从而实现您的目标。这可以在我所知道的所有浏览器中工作,但它将依赖于实现的怪癖,并且可能随时中断。您永远不应该假设JavaScript对象中元素的顺序。
饮歌长啸
TA贡献1951条经验 获得超3个赞
为了完整起见,此函数返回已排序的对象属性数组:
function sortObject(obj) { var arr = []; for (var prop in obj) { if (obj.hasOwnProperty(prop)) { arr.push({ 'key': prop, 'value': obj[prop] }); } } arr.sort(function(a, b) { return a.value - b.value; }); //arr.sort(function(a, b) { a.value.toLowerCase().localeCompare(b.value.toLowerCase()); }); //use this to sort as strings return arr; // returns array}var list = {"you": 100, "me": 75, "foo": 116, "bar": 15};var arr = sortObject(list);console.log(arr); // [{key:"bar", value:15}, {key:"me", value:75}, {key:"you", value:100}, {key:"foo", value:116}]
以上代码的Jsfiddle就在这里。此解决方案基于本文。
这里有用于排序字符串的更新小提琴。您可以从中删除其他.toLowerCase()转换,以进行区分大小写的字符串比较。
添加回答
举报
0/150
提交
取消