jQuery.each中的反向对象

时间:2011-01-29 18:27:12

标签: 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"]}' />

JS:

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

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

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

9 个答案:

答案 0 :(得分: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]);
    }
}

答案 1 :(得分:11)

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

$(yourobject).toArray().reverse();

就是这样。

答案 2 :(得分:9)

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

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

唯一的变化是第2行的“reverse()”。

答案 3 :(得分:4)

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

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

答案 4 :(得分:0)

您可以使用javascript函数sort()或reverse()

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

答案 5 :(得分:0)

我不知道,但是对于我使用的简单内容,这个功能完成了这项工作。它不依赖于数字键。并将从上到下翻转简单的对象。我不懂复杂的对象,所以我不知道它是多么“强大”。

function flipObject(obj){
    var arr = [];
    $.each(obj, function(key, val){
        var temp = new Object;
        temp['key'] = key;
        temp['val'] = val;
        arr.push(temp);
        delete temp;
        delete obj[key];
    });
    arr.reverse();
    $.each(arr, function(key, val){
        obj[val['key']] = val['val'];
    });
}

答案 6 :(得分:0)

jsonObj = [];

            $.each(data.reverse(), function (i, dt) {
                jsonObj.push({
                    'id': dt.id
                });

答案 7 :(得分:0)

这是一个似乎对我有用的选项。希望这有助于某人。显然只适用于简单的对象(非嵌套),但我想你可以通过一些额外的工作找出更复杂的方法。

var reversed_object = {};
Object.keys(original_object).reverse().forEach(function(key)
{ reversed_object[key] = original_object[key]; });

答案 8 :(得分:0)

  

对于对象

如果要处理对象,则reverse()将不起作用!相反,您可以这样做来维持订单。

$.each(Object.keys(myObj).reverse(),function(i,key){
  var value = myObj[key];
  //you have got your key and value in a loop that respects the order, go rock!
});