【问题标题】:Creating a nested object创建嵌套对象
【发布时间】:2018-10-06 22:26:54
【问题描述】:

这就是我想要做的:"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编写的。

【问题讨论】:

  • 我认为问题可能出在这一行:for (let index in word)。我相信索引等于每个字符,而不是字符索引。试试for (let index = 0; index < word.length; i++)?
  • 这对python来说是正确的,在javascript中它是一个索引
  • 您的代码看起来运行良好。它尝试使用 book 和 baak。你的问题是为什么?

标签: javascript python object hashtable


【解决方案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}}}}}

【讨论】:

  • 不是问题所在。他们正在构建一个 trie 数据结构,而不仅仅是一个嵌套对象。
  • @MarkMeyer 抱歉刚刚看到预期的结果,我可以把它记下来
【解决方案2】:

试试这个功能

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;  

}

【讨论】:

    猜你喜欢
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多