【问题标题】:Reverse object in jQuery.eachjQuery.each 中的反转对象
【发布时间】:2011-06-17 20:10:21
【问题描述】:

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);
}

输出:1640、1641、1642、...、1651

如何逆序制作(例如1651、1650...)?

【问题讨论】:

标签: javascript jquery object


【解决方案1】:

事实上,你不能以任何可靠的方式。因为您正在枚举一个对象,所以永远不会有保证的顺序。

如果你想要一个有保证的数字顺序,你需要使用一个数组,并向后迭代。


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

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

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]);
    }
}

【讨论】:

  • 谢谢。我会尝试用数字键创建额外的数组。
【解决方案2】:

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

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

就是这样。

【讨论】:

    【解决方案3】:

    我试过了,对我来说效果很好。

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

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

    【讨论】:

    • 空对象> reverse 不是函数
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

      对象

      如果你正在处理一个对象,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!
      });
      

      【讨论】:

        【解决方案6】:

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

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

        【讨论】:

        • 我希望可以,但它仅适用于数组,不适用于对象。
        【解决方案7】:

        我不知道,但是对于我使用的简单的东西,这个函数就可以了。它不依赖于数字键。并将简单的对象从上到下翻转。我不懂复杂的对象,所以不知道它有多“健壮”。

        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'];
            });
        }
        

        【讨论】:

          【解决方案8】:

          jsonObj = [];

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

          【讨论】:

            【解决方案9】:

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

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

            【讨论】:

              猜你喜欢
              • 2011-10-29
              • 2011-05-13
              • 2011-09-10
              • 1970-01-01
              • 2012-04-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-06-27
              相关资源
              最近更新 更多