2014-01-20 10 views
0

Это моя JSON структура:Сортировка вложенной JSON массив вместо

Root 
|- cells [] 
    |-Individual cells containing the following 
         |- Facts (Object) 
         |- Measures (Object) 
           |- Key values pairs 
|- other values 

Мне нужно, чтобы отсортировать значения в мерах объекта на месте. Будет ли это возможно? Если нет, каким должен быть оптимизированный способ приблизиться к этому? Я мог бы извлечь эти значения во временный массив, а затем отсортировать их, а затем выполнить поиск их соответствующих ключей и переупорядочить весь JSON. Но это не похоже на оптимизированное решение.

Я в основном пытаюсь добиться сортировки в jsHypercube: https://github.com/thesmart/js-hypercube. Искал библиотеку, но не смог найти какой-либо метод сортировки.


Добавление хруст образца JSON: enter image description here

Ожидаемый результат представляет собой отсортированный массив _cells на основе любого ключа measures объекта, как стоимость, прибыль или доход.


Согласно комментариям @FelixKling, я считаю, что данные должны быть отсортированы, прежде чем сериализации в объект JavaScript. Исходные данные перед сериализацией: enter image description here

+0

Мы не можем сортировать элементы в объектах, поскольку они являются технически hashtables. – thefourtheye

+0

Не могли бы вы предоставить такой же ввод JSON и ожидаемый результат? – thefourtheye

+3

Обратите внимание, что JSON - это независимый от языка текстовый формат обмена данными, такой как XML, CSV или YAML. Вы не можете * сортировать * JSON самостоятельно, но можете сортировать структуры данных, к которым были преобразованы данные JSON. Итак: Ваша проблема не имеет ничего общего с JSON. См. Также: [Нет такой вещи, как «объект JSON»] (http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/) –

ответ

1

С помощью @ FelixKling-х внушениями, я был в состоянии сортировать его с помощью простого блока кода. Проводка, поскольку это может быть полезно для кого-то другого.

tempCube.sort(function(a, b) { 
     var valueA, valueB;   

     valueA = a.measures.Cost; 
     valueB = b.measures.Cost; 
     if (valueA < valueB) { 
      return -1; 
     } 
     else if (valueA > valueB) { 
      return 1; 
     } 
     return 0; 
    }); 
+0

Это обратный вызов для сортировки массива, является ли это решением для указанных выше вопросов Q и Thread? –

+0

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

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