Обратный объект в 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...)?
Ответы
Ответ 1
Как бы то ни было, вы не можете надежно. Поскольку вы перечисляете объект, никогда не гарантируется порядок.
Если вам нужен гарантированный порядковый номер, вам нужно будет использовать массив и выполнить итерацию назад.
EDIT:. Это преобразует ваш объект в массив и выполняет обратную итерацию.
Обратите внимание, что он будет работать только в том случае, если все свойства являются числовыми.
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);
});
Единственное изменение - "reverse()" в строке 2.
Ответ 4
Если вам нужно всего лишь создать некоторый HTML из вашего JSON и поместить сгенерированные элементы в контейнер в обратном порядке, вы можете использовать метод jQuery prependTo при создании своего HTML.
var container = $('<div />');
$.each(data, function (key, value) {
$('<div>' + value + '</div>').prependTo(container);
});
Ответ 5
Вы можете использовать функцию javascript sort() или reverse()
var data = $.parseJSON($('#sdata').val());
data.reverse();
$.each(data, function(id, sc) {
alert(id);
}
Ответ 6
Я не знаю, но для простых вещей, с которыми я работаю, эта функция выполняет эту работу. Он не полагается на числовые клавиши. И перевернет простые объекты сверху вниз. Я не понимаю сложные объекты, поэтому я не знаю, насколько он "надежный".
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'];
});
}
Ответ 7
jsonObj = [];
$.each(data.reverse(), function (i, dt) {
jsonObj.push({
'id': dt.id
});
Ответ 8
Здесь вариант, который, казалось, сработал у меня. Надеюсь, это поможет кому-то. Очевидно, что работает только на простых объектах (не вложенных), но я полагаю, вы могли бы выяснить, как сделать что-то более сложное с небольшой дополнительной работой.
var reversed_object = {};
Object.keys(original_object).reverse().forEach(function(key)
{ reversed_object[key] = original_object[key]; });