Я получаю большой массив от вызова веб-службы, через который мне нужно заполнить выпадающий список.
[{"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
.
Какой будет лучший способ играть с этим массивом, чтобы получить быстрый результат, потому что я буду получать тысячи элементов в нем.
Взгляните на структуру данных 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
- это элемент в вашем массиве.