【发布时间】: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