在JS中保持我的排序

时间:2013-09-17 11:54:55

标签: javascript dom javascript-events

我有一个具有该值的对象:

category_list = {
 "1000":{
     "name":"Cars",
     "order":"1",
     "level": "2"
  },
 "2010":{
     "name":"Houses",
     "order":"2",
     "level": "2"
  },
 "1030":{
        "name":"Cars",
        "order":"3",
        "level": "2"
     }
  }

当我想展示它时,chrome会根据索引重新排序:

它变成了:

    category_list = {
 "1000":{
     "name":"Cars",
     "order":"1",
     "level": "2"
  },
  "1030":{
        "name":"Cars",
        "order":"3",
        "level": "2"
  },
  "2010":{
     "name":"Houses",
     "order":"2",
     "level": "2"
  }
 }

我希望保持推送时的顺序!或根据字段“订单”重新排序

有人可以帮忙吗

最好的问候

2 个答案:

答案 0 :(得分:3)

根据定义,JavaScript对象 无序

如果您需要有序列表,则应使用数组(对象),例如:

var objs = [
    {
        "key": 1000,
        "name":"Cars",
        "order": 1,
        "level": 2
    }, ...
];

objs.sort(function(a, b) {
    return a.order - b.order;
});

注意:对于数字属性,请使用数字类型。

答案 1 :(得分:1)

JavaScript对象不保证其属性的特定顺序。因此,您希望拥有的结构在JavaScript中不存在。

因此,使用原生结构,您可以获得:

  • 数组:保证顺序,但只能按顺序或通过数字(0..n-1)索引访问元素
  • 对象:任意顺序,但您可以按顺序访问元素(再次,任意顺序)或使用其键(可以是任何字符串)

如果你需要两者,你需要添加一个将顺序映射到对象键的数组,例如: [1000, 2010, 1030]或将数据存储在数组中并创建如下映射:{1000: 0, 2010: 1, 1030: 2}