javascript
  • jquery
  • object
  • 2011-01-29 4198 views 10 likes 
    10

    HTML:đối tượng Xếp trong jQuery.each

    <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

    Làm thế nào để làm cho nó ngược lại trật tự (ví dụ 1651, 1650 ...)?

    +0

    Có thể trùng lặp của http://stackoverflow.com/questions/1394020/jquery-each-backwards –

    +5

    Không phải là một sự lừa dối, vì chúng tôi đang xử lý một đối tượng. – karim79

    Trả lời

    12

    Vì vậy, bạn không thể tin tưởng vào bất kỳ cách nào đáng tin cậy. Bởi vì bạn đang liệt kê một đối tượng, không bao giờ có một trật tự được bảo đảm.

    Nếu bạn muốn một thứ tự số được bảo đảm, bạn sẽ cần phải sử dụng một mảng và lặp lại.


    EDIT: này sẽ chuyển đổi đối tượng của bạn đến một mảng, và làm một sự lặp lại ngược lại.

    Lưu ý rằng nó sẽ chỉ hoạt động nếu tất cả các thuộc tính đều là số.

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

    Cảm ơn. Tôi sẽ cố gắng tạo thêm mảng với các phím số. – Sladex

    0

    Bạn có thể sử dụng chức năng sắp xếp javascript() hoặc ngược lại()

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

    Tôi ước tôi có thể, nhưng nó hoạt động cho các mảng không chỉ cho các đối tượng. – Sladex

    0

    Tôi không biết, nhưng đối với những thứ đơn giản, tôi làm việc với, chức năng này không được công việc. Nó không dựa vào các phím số. Và sẽ lật các đối tượng đơn giản từ trên xuống dưới. Tôi không hiểu các đối tượng phức tạp, vì vậy tôi không biết làm thế nào "mạnh mẽ" nó được.

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

    Nếu tất cả các bạn cần làm là tạo ra một số HTML ra khỏi JSON của bạn và đặt yếu tố tạo thành một container theo thứ tự ngược bạn có thể sử dụng phương pháp prependTo jQuery khi xây dựng HTML của bạn.

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

    Có một giải pháp, một khá dễ dàng một:

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

    Vậy là xong.

    5

    Tôi đã thử cách này và nó hoạt động hoàn hảo cho tôi.

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

    Sự thay đổi duy nhất là sự "đảo ngược()" trong dòng 2.

    0

    jsonObj = [];

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

    Đây là tùy chọn dường như đã hoạt động đối với tôi. Hy vọng điều này sẽ giúp một ai đó. Rõ ràng chỉ hoạt động trên các đối tượng đơn giản (không lồng nhau) nhưng tôi cho rằng bạn có thể tìm ra cách để làm cho một cái gì đó phức tạp hơn với một công việc nhỏ hơn.

    var reversed_object = {}; 
    Object.keys(original_object).reverse().forEach(function(key) 
    { reversed_object[key] = original_object[key]; }); 
    
    Các vấn đề liên quan