javascript - 创建嵌套对象
问题描述
这就是我想要做的:"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编写的。
解决方案
从内到外 构造嵌套字典的更简单的解决方案
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}}}}}
推荐阅读
- azure - AppCenter 生成 TesPlan。Azure 开发运维
- javascript - 在javascript中动态加载库时'找不到名称'html2canvas'.ts(2304)'
- angular - NullInjectorError:没有 Firestore 服务的提供者
- checkbox - 带有过滤数据表的复选框
- maven - maven wildfly插件如何定位jboss应用服务器(EAP)?
- node.js - 我如何计算 mongoDB 中的所有用户和帖子
- python - numpy 轮子不是此平台上支持的轮子
- google-apps-script - 如何在保留条件格式的同时使用谷歌应用程序脚本复制新的谷歌工作表?
- python - Django 中的持久化蛞蝓
- wordpress - Wordpress 下拉菜单突然不可见