Обратный объект в jQuery.each - PullRequest
11 голосов
/ 29 января 2011

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 ]

13 голосов
/ 29 января 2011

На самом деле, вы не можете надежным способом.Поскольку вы перечисляете объект, никогда не существует гарантированного порядка.

Если вам нужен гарантированный порядковый номер, вам нужно использовать массив и выполнять итерации в обратном направлении.


РЕДАКТИРОВАТЬ: Это преобразует ваш объект в массив, и сделать обратную итерацию.

Обратите внимание, что он будет работать, только если все свойства являются числовыми.

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]);
    }
}
11 голосов
/ 31 мая 2012

Есть еще одно решение, довольно простое:

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

Вот и все.

9 голосов
/ 22 августа 2013

Я попробовал это, и это отлично сработало для меня.

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

Единственное изменение - это "reverse ()" в строке 2.

4 голосов
/ 22 октября 2011

Если все, что вам нужно сделать, это сгенерировать некоторый HTML из вашего JSON и поместить сгенерированные элементы в контейнер в обратном порядке, вы можете использовать метод prependTo jQuery при построении вашего HTML.

var container = $('<div />');
$.each(data, function (key, value) {
    $('<div>' + value + '</div>').prependTo(container);
});
1 голос
/ 10 апреля 2019

Для объектов

Если вы имеете дело с объектом, 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!
});
0 голосов
/ 11 ноября 2017

Вот вариант, который, казалось, сработал для меня. Надеюсь, это кому-нибудь поможет. Очевидно, что он работает только с простыми объектами (не вложенными), но я полагаю, вы могли бы найти способ сделать что-то более сложное с небольшой дополнительной работой.

var reversed_object = {};
Object.keys(original_object).reverse().forEach(function(key)
{ reversed_object[key] = original_object[key]; });
0 голосов
/ 13 августа 2015

jsonObj = [];

            $.each(data.reverse(), function (i, dt) {
                jsonObj.push({
                    'id': dt.id
                });
0 голосов
/ 02 мая 2011

Не знаю, но для простых вещей, с которыми я работаю, эта функция делает свою работу. Он не опирается на цифровые клавиши. И будет переворачивать простые объекты сверху вниз. Я не понимаю сложные Объекты, поэтому я не знаю, насколько это "надежно".

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'];
    });
}
0 голосов
/ 29 января 2011

Вы можете использовать функцию сортировки JavaScript () или наоборот ()

var data = $.parseJSON($('#sdata').val());
data.reverse();
$.each(data, function(id, sc) {
alert(id);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...