0

我的 json 对象如下所示:

events:{
"2": {
    "action": "some value",
    "property": "some value"
}
"0": {
    "action": "some value",
    "property": "some value"
}
"1": {
    "action": "some value",
    "property": "some value"
}

}

我需要对对象的属性进行排序。有没有办法做到这一点?结果应该是这样的:

events:{
"0": {
    "action": "some value",
    "property": "some value"
}
"1": {
    "action": "some value",
    "property": "some value"
}
"2": {
    "action": "some value",
    "property": "some value"
}

}
4

2 回答 2

1

结合我的评论,以这种方式存储它:使用数组,然后将这些索引存储为 id。然后你可以使用一些排序算法来移动它们。这里'是一些你可能想看看的排序算法示例

events:[
    {
        "id" : 2,
        "action": "some value",
        "property": "some value"
    },
    {
        "id" : 0,
        "action": "some value",
        "property": "some value"
    },
    {
        "id" : 1,
        "action": "some value",
        "property": "some value"
    }
]
于 2012-04-14T07:12:25.780 回答
1

为了保证顺序,就像@Joseph 说的那样,它需要在一个数组中:

var events = {
  "2": {
    "action": "some value",
    "property": "some value"
  },
  "0": {
    "action": "some value",
    "property": "some value"
  },
  "1": {
    "action": "some value",
    "property": "some value"
  }
};

var eventOrder = [];

for( var prop in events ){
  if( events.hasOwnProperty( prop ) ){
    eventOrder.push( prop );
  }
}

eventOrder.sort();

注意:这将按字母顺序排序,因为您使用的是字符串,所以如果您有超过 9 个项目,您最终可能会得到 eventOrder 作为 [ "1", "10", "2", ... ] . 如果不希望这样做,您可以在存储到数组之前先解析 Int,然后在进行查找时强制字符串化。

于 2012-04-14T07:17:57.843 回答