簡體   English   中英

jQuery.each中的反向對象

[英]Reverse object in jQuery.each

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 ......)?

事實上,你不能以任何可靠的方式。 因為您枚舉了一個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]);
    }
}

還有另一個解決方案,一個相當簡單的方法:

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

而已。

我嘗試了這個,它對我來說很有效。

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

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

如果您需要做的就是從JSON生成一些HTML並將生成的元素以相反的順序放入容器中,那么在構建HTML時可以使用jQuery的prependTo方法。

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

對象

如果你正在處理一個對象,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!
});

jsonObj = [];

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

這是一個似乎對我有用的選項。 希望這有助於某人。 顯然只適用於簡單的對象(非嵌套),但我想你可以通過一些額外的工作找出更復雜的方法。

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

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

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

我不知道,但是對於我使用的簡單的東西,這個功能完成了這項工作。 它不依賴於數字鍵。 並將從上到下翻轉簡單的對象。 我不懂復雜的對象,所以我不知道它是多么“強大”。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM