2016-03-16 1 views
0

В настоящее время у меня есть небольшой кусок кода, который петли через объект JSON:Петля через объект JSON и сортировки в порядке

for (var key in json_object) { 
    if (json_object.hasOwnProperty(key)) { 
     var value  = key; //e.g. 50_100, 1000_2000, 20_50 etc 
    } 
} 

Я буду выводить эти значения в список позже. Но проблема в том, что эти ценности сейчас не в каком-либо порядке.

Я хотел бы иметь возможность сортировать эти значения по порядку. Поэтому мой вопрос: возможно ли это, и если да, то как?

Спасибо!

+1

объектов не имеют порядок. Если определено во время компиляции, порядок ключей сохраняется, иначе сортируется по алфавиту порядка имени – gurvinder372

+1

. Вы можете сделать массив этих значений ключа, а не сортировать его. Как сказал # gurvinder372 - никакой сортировки для ключей в объекте –

+0

Моя цель - уметь выводить их в упорядоченный список позже, так есть ли какие-либо альтернативы или другие способы достижения того, что мне нужно? – user2028856

ответ

1

В JavaScript, свойство объекта не гарантируется в определенном порядке, так если вы хотите сохранить порядок, вам, скорее всего, нужно будет написать свойства объекта в массив объектов.

Это может выглядеть следующим образом: ключи

var object_array = []; 
// map properties into array of objects 
for (var key in json_object) { 
    if (json_object.hasOwnProperty(key)) { 
     object_array.push({ 
      'key': key; 
      'value': value; 
     }); 
    } 
} 
// sort array of objects 
object_array.sort(function(a,b) { 
    // note that you might need to change the sort comparison function to meet your needs 
    return (a.value > b.value); 
} 
+0

Я пробовал это, но он, похоже, не выполняет сортировку для строк, таких как «100_500», «800_1000», «2000_3000» и т. Д. – user2028856

+0

@ user2028856 поэтому я указал, что вам может потребоваться изменить сортировку, чтобы сделать что-то применимое к значениям, которые вы сортируете. В случае ваших строк, как бы вы предложили выполнить сортировку? –

+0

Ваша функция сравнения недопустима, см. [Сортировка в JavaScript: не нужно ли возвращать логическое значение для функции сравнения?] (Http://stackoverflow.com/q/24080785/1048572) – Bergi

0

После прочтения всех решений, я понял, что мое решение было неправильным. Object.keys хорош для получения только массива ключей, поэтому решение Майка Бранта верное, хотя требуется небольшое исправление, поскольку value не является переменной. Наконец вот фиксированное решение, основанное на его решении + запрашиваемая сортировку из комментариев:

var arr = []; 

for (var key in json_object) { 
    if (json_object.hasOwnProperty(key)) { 
     arr.push({ 
      'key': key; 
      'value': json_object[key]; 
     }); 
    } 
} 

// this will sort by the first part of the string 
arr.sort(function(a, b) { 
    return a.key.split('_')[0] - b.key.split('_')[0]; 
} 

Надеется, что это помогает ... :-)

+1

Что такое 'значение'? Вероятно, это не индекс массива. – Bergi

+0

Не могли бы вы рассказать мне, что я должен использовать для «ценности»? – user2028856

+1

Вы можете напрямую использовать 'Object.keys (obj) .sort (function() {})' – Rajesh

Смежные вопросы