Создание вложенного объекта - PullRequest
0 голосов
/ 07 октября 2018

это то, что я пытаюсь сделать: "book" => {b:{o:{o:k:{'end':true}

Может кто-нибудь объяснить мне / связать мне объяснение этого?

const ENDS_HERE = '__ENDS_HERE'

class Trie {
  constructor() {
    this.node = {};
  }
  insert(word){ 
    let trie = this.node;
    console.log( 'start inset', trie )
    for ( let index in word ) {
      let char = word[index];
      if ( !trie[char] ) {
        trie[char]= {}
      }
      console.log( trie )
      trie = trie[char]
    }
    trie[ENDS_HERE] = true
  }
}


let test= new Trie
test.insert('book')
test.insert('baak')

это то, что записывается в журнал:

start inset {}
{ b: {} }
{ o: {} }
{ o: {} }
{ k: {} }
start inset { b: { o: { o: [Object] } } }
{ b: { o: { o: [Object] } } }
{ o: { o: { k: [Object] } }, a: {} }
{ a: {} }
{ k: {} }

в этой строке trie = trie[char] сбрасывает значение дерева в {}.последняя строка для функции вставки затем устанавливает { '__ENDS_HERE' = true}, однако при вызове test.insert('baak') вы можете видеть, что trie === { b: { o: { o: [Object] } } }.

мой вопрос: как он строит {b:{o:{o:k:{'end':true}? такие же результаты возникают в python.Код выше написан на JavaScript.

Ответы [ 2 ]

0 голосов
/ 07 октября 2018

Более простое решение - построение вложенного словаря изнутри

s = 'book'
s = list(s)
s.append('end')
d = {}

for key in reversed(s):
    if key == 'end':
        d = {key: True}
    else:
        d = {key: d}
# {'b': {'o': {'o': {'k': {'end': True}}}}}
0 голосов
/ 07 октября 2018

попробуйте эту функцию

insert(word) {
  const finalObj = {}; 
  let currentObj = finalObj;

  word.split('').forEach((char, i) => {
    if (i === 0) {
      finalObj[char] = {};
      currentObj = finalObj[char];
    } else {
      currentObj[char] = {};
      currentObj = currentObj[char];      
    }           
  });
  currentObj.end = true;
  return finalObj;  

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...