首页 > 解决方案 > 创建嵌套对象

问题描述

这就是我想要做的:"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],它将 trie 重置为{}. 然后设置插入函数的最后一行,{ '__ENDS_HERE' = true} 但是在调用时test.insert('baak')您可以看到trie === { b: { o: { o: [Object] } } }

我的问题是它是如何构建的{b:{o:{o:k:{'end':true} 同样的结果也出现在 python 中。上面的代码是用javascript编写的。

标签: javascriptpythonobjecthashtable

解决方案


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

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

推荐阅读