创建一个嵌套对象

时间:2018-10-06 22:26:55

标签: javascript python object hashtable

这就是我想要做的:"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 :(得分:1)

从内到外构造嵌套字典的更简单解决方案

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}}}}}

答案 1 :(得分:0)

尝试此功能

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;  

}