1

我有一些 JSON 数据:

{  
  "113":{"id":"113","title":"Coal","hex":"4f4f4f"},
  "116":{"id":"116","title":"White","hex":"fdfbf7"},
  "115":{"id":"115","title":"Greylead","hex":"b3b3b3"}
}

在我可以访问的数据属性的标记中,如下所示:

var arr = $("#element).data('arr');

然后对每个项目做一些事情。像这样:

$.each( arr, function( index, obj ){ 
   console.log( obj.title + ' is #' + obj.hex );
}

但是数据中项目的顺序没有被保留。

$.each似乎通过数据中每个项目的前导数进行迭代,而不是项目实际在数组中的顺序。我以数字顺序 113、115、116 而不是 113、116、115(这是数据中项目的实际顺序)得到我的输出。

我将如何遍历实际订单中的项目?

4

2 回答 2

5

如果顺序对您很重要,请使用普通数组:

[
    {"key": "113", "id":"113","title":"Coal","hex":"4f4f4f"}, 
    {"key": "116", "id":"116","title":"White","hex":"fdfbf7"}, 
    {"key": "115", "id":"115","title":"Greylead","hex":"b3b3b3"}
]

然后简单循环:

for (var i = 0; i < arr.length; i++) {
    var obj = arr[i];
    console.log( obj.title + ' is #' + obj.hex );
}

现场测试用例

如果您想根据其键搜索项目,您现在必须遍历所有项目才能找到它。为了提高效率,您可以创建额外的“映射器”对象:

var mapper = {};
for (var i = 0; i < arr.length; i++) {
    var obj = arr[i];
    mapper[obj.key] = obj;
}

然后根据键查找项目:

key = "115";
if (mapper[key]) {
    //exists...
}

更新了小提琴

于 2013-06-09T12:54:46.777 回答
0

去这个网站 http://json.parser.online.fr并粘贴这个

   {  
    "113":{"id":"113","title":"Coal","hex":"4f4f4f"},
    "116":{"id":"116","title":"White","hex":"fdfbf7"},
    "115":{"id":"115","title":"Greylead","hex":"b3b3b3"}
   }

我想你会在 JSON.parse 维护 ORDER 和 eval('('+data+')') 维护 INDEX 的地方得到你的答案。然后运行一个普通的循环并做你的其他工作。

于 2013-06-09T15:03:33.670 回答