Я пытаюсь реализовать вариацию trie в JavaScript. В принципе, это эффективный объект хранения данных, в котором символы в ключах не повторяются. Другими словами, если у меня есть ключи «Абэ» и «ANN,» только один экземпляр разделяемого буквы «а» должно появиться:Динамическое присвоение свойств объекту JavaScript (trie)
{
a: {
b: {
e: {
0: 'lincoln'
}
},
n: {
n: {
0: 'mcgee'
}
}
}
}
Вот желаемая реализация и несколько примеров использования:
function Trie() {
// The top level of the trie.
var root = {};
return {
write: function (key, value) {
},
read: function (key) {
}
};
}
// Sample usage
var trie = new Trie();
trie.write('abe', 'lincoln');
trie.write('ann', 'mcgee');
trie.read('abe'); // returns 'lincoln'
trie.read('ann'); // returns 'mcgee'
Я столкнулся с блокатором относительно метода write
. Учитывая строковый ключ, такой как «abe», мне нужно присвоить свойство root['a']['b']['e']
. Я не могу найти способ присвоить значение объекту нескольким слоям, если число ключей и значения ключей неизвестны.
Единственное решение, которое приходит на ум, я думаю, плохое: поместив путь к значению в строку и используя eval
. Например: eval("root['a']['b']['e'] = 'lincoln'");
Есть ли лучшее решение для динамического присвоения значений? (Я понимаю, что это немного сложной проблемы, так что я рад уточнить путем предоставления дополнительной информации.)
это просто операция цикла в чтения/записи, чтобы ходить по дереву до конца после каждой буквы в ключе. Если письмо не найдено, для этой буквы создается новая ветка в дереве. – cgTag