为了账号安全,请及时绑定邮箱和手机立即绑定

按属性值排序JavaScript对象

按属性值排序JavaScript对象

桃花长相依 2019-05-25 16:41:41
按属性值排序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对象中元素的顺序。


查看完整回答
反对 回复 2019-05-25
?
饮歌长啸

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()转换,以进行区分大小写的字符串比较。


查看完整回答
反对 回复 2019-05-25
  • 4 回答
  • 0 关注
  • 1438 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信