javascript - 如何初始化 java 脚本字典(类似于 python 中的 setdefault)
问题描述
有没有更好的方法来用空数组初始化下面的字典?
itemGroups = {}
if( ! (group in itemGroups) ){
itemGroups[ group ] = {}
}
if ( ! (itemStr in itemGroups[group])) {
itemGroups[group][ itemStr ] = []
}
itemGroups[group][ itemStr ].push( item )
解决方案
虽然我通常不喜欢代码缩写。||
操作员确实可以方便地完成此类任务:
itemGroups = {}
itemGroups[group] = itemGroups[group] || {}
itemGroups[group][itemStr] = itemGroups[group][itemStr] || []
itemGroups[group][itemStr].push( item )
但是,如果这真的更好,取决于您的喜好。而且你需要记住,itemGroups[ group ] || {}
不检查它group
是否存在itemGroups
只检查值是否为真,所以它在技术上不等于你的代码。
您可以做的另一件事是编写一个辅助函数:
function setIfNotExists(obj, key, value) {
if( ! (key in obj) ){
obj[ key ] = value
}
}
itemGroups = {}
setIfNotExists(itemGroups, group, {})
setIfNotExists(itemGroups[group], itemStr, [])
itemGroups[group][itemStr].push( item )
那将等于您的代码,并且由于函数名称,它更多地表达了实际发生的事情。
推荐阅读
- azure - 如何在 Windows azure 中角色回资源组操作
- php - 将值插入多行时面临问题
- android - Android中的平移和缩放布局动画问题
- mysql - 如何形成正确的 SQL 语句?
- javascript - 如何从useState中的不同字符串合并到一个对象中?
- ruby-on-rails - 将补丁与 rspec 测试一起使用
- python - Pytorch 中的向量张量元素乘法
- python - 谷歌云函数在 Python 中设置实时数据库触发器
- java - 如何将 Dictionary 项目序列化为类的平面属性?
- json - 无法从 openweathermap api 获取值