jQuery.each中的反向对象

Sla*_*dex 11 javascript jquery object

HTML:

<input id="sdata" type="hidden" value='{"1651":["12","1"],"1650":["30","0"],"1649":["20","0"],"1648":["13","2"],"1647":["11","0"],"1646":["10","0"],"1645":["12","0"],"1644":["8","0"],"1643":["16","1"],"1642":["10","1"],"1641":["10","0"],"1640":["18","3"]}' />
Run Code Online (Sandbox Code Playgroud)

JS:

var data = $.parseJSON($('#sdata').val());
$.each(data, function(id, sc) {
    alert(id);
}
Run Code Online (Sandbox Code Playgroud)

OUT:1640,1641,1642,......,1651

如何以相反的顺序(例如1651,1650 ......)?

use*_*716 13

事实上,你不能以任何可靠的方式.因为您枚举了一个Object,所以从来没有保证订单.

如果需要有保证的数字顺序,则需要使用数组,然后向后迭代.


编辑:这会将您的对象转换为数组,并执行反向迭代.

请注意,它仅在所有属性都是数字时才有效.

var data = $.parseJSON($('#sdata').val());
var arr = [];

for( var name in data ) {
    arr[name] = data[name];
}
var len = arr.length;
while( len-- ) {
    if( arr[len] !== undefined ) {
        console.log(len,arr[len]);
    }
}
Run Code Online (Sandbox Code Playgroud)


xor*_*zor 11

还有另一个解决方案,一个相当简单的方法:

$(yourobject).toArray().reverse();
Run Code Online (Sandbox Code Playgroud)

而已.


小智 9

我尝试了这个,它对我来说很有效.

var data = $.parseJSON($('#sdata').val());
$.each(data.reverse(), function(id, sc) {
    alert(id);
});
Run Code Online (Sandbox Code Playgroud)

唯一的变化是第2行的"reverse()".


小智 5

如果您需要做的只是从 JSON 中生成一些 HTML 并以相反的顺序将生成的元素放入容器中,则可以在构建 HTML 时使用 jQuery 的 prependTo 方法。

var container = $('<div />');
$.each(data, function (key, value) {
    $('<div>' + value + '</div>').prependTo(container);
});
Run Code Online (Sandbox Code Playgroud)