js中有什么办法能让对象进行排序呢?

后台返回了一个json对象,顺序是已经排好了的

clipboard.png

但是我用js像遍历数组那样去for in遍历这个对象时 结果和原对象却不一样了 查过资料后才知道js对象是无序的。。 那么有办法顺序遍历这个对象么? 或者怎么顺序得到原对象的属性?

阅读 17.8k
评论
    11 个回答
    • 266
    Object.keys(objs).sort()可以获取到排好序的keys
    var objs = {
        f: {
            id: 2,
            name: '2'
        }, 
        a: {
            id: 3,
            name: '3'
        }, 
        c: {
            id: 1,
            name: '1'
        }
    };
    // 自定义排序规则,按对象的id排序
    var sortedObjKeys = Object.keys(objs).sort(function(a, b) {
        return objs[b].id - objs[a].id;
    });
    
    // 按默认排序规则,按对象的key排序
    var sortedObjKeys = Object.keys(objs).sort();
    
    for (var index in sortedObjKeys) {
        console.log(sortedObjKeys[index]);
        console.log(objs[sortedObjKeys[index]]);
        console.log('----------');
    }
      ss.sort(function(a, b){
          return a.UserID > b.UserID;
      });
        • 4.7k
        var obj = {
            1 :[{userID:'1'}],
            2 :[{userID:'2'}],
            H :[{userID:'3'}],
            Z :[{userID:'4'}],
        };
        var objKeys = Object.keys(obj);
        objKeys.sort((a,b) =>{
            return a>b;
        }).map((val) => {
            console.log("userID "+ obj[val][0].userID)
        });
        / 输出
        // userID 1
        // userID 2
        // userID 3
        // userID 4
          • 9k

          无解。排好序就应该用数组。或者附带一个 keys 的数组。

          对象里的顺序在 ES5 是没有规定的,所以不同的引擎可能会不一样。

          ES6 里 Object.getOwnPropertyNames()Object.getOwnPropertySymbols() 以及等效于两者结合的 Reflect.ownKeys() 会按一定的顺序输出,但不是你要的答案。

          看 json 的结构貌似是按数字和词典的顺序排,如果是这样的可以手动排一遍。

            • 6.7k
            Object.keys(obj).sort(function() {
                // 为了以防万一,这里先排好键值顺序,代码省略,也可以直接用sort()默认排序
            }).map(function(v) {
                return obj[v]; // 根据原键名从obj中再找对应的项
            });

            这样,返回的是一个数组,就是固定顺序的了。

              1、我感觉如果你的页面显示正好是后端返回的排序的顺序,那你就不需要排序,直接显示就好了。
              2、如果想要的顺序和后端的顺序是不一样的,那就看产品是根据什么字段排序,排序显示的。那你就根据对象里的这个字段进行排序。
              这样应该可以得到你想要的了。

                • 421
                // 对array 排序
                 res.sort((a, b) => {
                   if (a.UserID > b.UserID ) {  // 可以改成其他key
                      return 1
                   } else {
                      return -1
                   }
                  })
                

                  因为json对象没有顺序,所以“预先排好的顺序”其实并不存在
                  如果说前端要根据键名排序,可以先把键名取出,排序,再去取内容就行了吧

                    既然后台返回的是排序好的数据,如果你用的是ajax请求数据,dataType:json,你接收到数据之后,直接遍历,填充在模板中就可以了啊。如果顺序不对,我感觉是你从后台拿到的数据不对的原因

                      希望有顺序的值就用数组保存,然后放到json的属性里面。

                        JS对象是散列表,可类别java,C#,或Python等里的dict,它们都是无序的。需要有序,就得用Array。

                          撰写回答

                          登录后参与交流、获取后续更新提醒

                          相似问题
                          推荐文章