Сортировка иерархических списков - лучший способ ускорить навигацию

0

Я получаю большой массив от вызова веб-службы, через который мне нужно заполнить выпадающий список.

[{"Level1":"A1","Level2":"A11","Level3:"A111"},
{"Level1":"A1","Level2":"A12","Level3:""},
{"Level1":"A2","Level2":"A21","Level3:"A212"},
{"Level1":"A2","Level2":"A22","Level3:""},
{"Level1":"A3","Level2":"","Level3:""},
{"Level1":"A4","Level2":"A41","Level3:"A412","Level4:"A4123"}]

Мой массив находится в этом формате. Мне нужно создать список, который должен иметь кнопку "назад", за исключением случаев. Также количество уровней динамическое, что означает, что он может иметь уровень 5,6,7... также.

Параметры списка должны быть be-

A1, A2, A3, A4

Если пользователь нажимает A2, показанные опции должны be-

A21, A22

Теперь, если пользователь нажмет на A21, он должен показать -

A212

но если они A22

он должен выбрать это значение, поскольку A22 больше не имеет значения. Также, если пользователь выбрал обратно, когда у них есть опция A212, он должен показывать A21 и A22.

Какой будет лучший способ играть с этим массивом, чтобы получить быстрый результат, потому что я буду получать тысячи элементов в нем.

  • 0
    Ваш веб-сервис возвращает неверный JSON.
  • 0
    пожалуйста, добавьте желаемый результат - предположительно, структуру данных.
Теги:
arrays
logic

1 ответ

0

Взгляните на структуру данных Trie.

В JavaScript вы можете организовать его следующим образом:

var root = { "A1": { "A11": .., "A12": .. }, "A2": { "A21": .., "A22": .. }, .. };

Таким образом, вы берете ключи от root объектов и показываете их. Если пользователь нажимает на A1, вы берете root["A1"] значения root["A1"] и так далее.

Чтобы построить его, используйте простой метод вставки (надеюсь, что все правильно, проверьте):

function insert(node, elem, level) {
   var key = "Level" + level;
   var value = elem[key];
   if (!value) {
      return;
   }
   var childNode = node[value];
   if (!childNode) {
     childNode = {};
     node[value] = childNode;
   }
   insert(childNode, elem, level + 1);
}

Начните с объявления root = {} и insert(root, elem, 1) где elem - это элемент в вашем массиве.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню