-1

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

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

当我想展示它时,chrome 根据 Index 对其重新排序:

它成为了 :

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

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

有人可以帮忙吗

此致

4

2 回答 2

3

JavaScript 对象根据定义是 无序的。

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

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

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

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

于 2013-09-17T12:16:45.700 回答
1

JavaScript 对象不保证其属性的特定顺序。所以你想要的结构在 JavaScript 中根本不存在。

因此,使用本机结构,您可以获得:

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

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

于 2013-09-17T12:19:52.240 回答