我有一些JSON数据:
{
"113":{"id":"113","title":"Coal","hex":"4f4f4f"},
"116":{"id":"116","title":"White","hex":"fdfbf7"},
"115":{"id":"115","title":"Greylead","hex":"b3b3b3"}
}
Run Code Online (Sandbox Code Playgroud)
在我可以访问的数据属性的标记中,如下所示:
var arr = $("#element).data('arr');
Run Code Online (Sandbox Code Playgroud)
然后对每个项目做一些事情.像这样:
$.each( arr, function( index, obj ){
console.log( obj.title + ' is #' + obj.hex );
}
Run Code Online (Sandbox Code Playgroud)
但是没有保留数据中项目的顺序.
$.each似乎是通过数据中每个项目的前导数来迭代,而不是项目实际在数组中的顺序.我以数字顺序113,115,116而不是113,116,115得到我的输出(这是数据中项目的实际顺序).
我如何迭代实际订单中的项目?
如果订单对您很重要,请使用plain array:
[
{"key": "113", "id":"113","title":"Coal","hex":"4f4f4f"},
{"key": "116", "id":"116","title":"White","hex":"fdfbf7"},
{"key": "115", "id":"115","title":"Greylead","hex":"b3b3b3"}
]
Run Code Online (Sandbox Code Playgroud)
然后是普通循环:
for (var i = 0; i < arr.length; i++) {
var obj = arr[i];
console.log( obj.title + ' is #' + obj.hex );
}
Run Code Online (Sandbox Code Playgroud)
如果要根据其键搜索项目,则现在必须遍历所有项目才能找到它.为了提高效率,您可以创建额外的"映射器"对象:
var mapper = {};
for (var i = 0; i < arr.length; i++) {
var obj = arr[i];
mapper[obj.key] = obj;
}
Run Code Online (Sandbox Code Playgroud)
然后根据键查找项目:
key = "115";
if (mapper[key]) {
//exists...
}
Run Code Online (Sandbox Code Playgroud)