首页 > 解决方案 > 如何初始化 java 脚本字典(类似于 python 中的 setdefault)

问题描述

有没有更好的方法来用空数组初始化下面的字典?

itemGroups = {}

if( ! (group  in itemGroups) ){
    itemGroups[ group ] = {}
}

if ( ! (itemStr in itemGroups[group])) {

    itemGroups[group][ itemStr ] = []
}

itemGroups[group][ itemStr ].push( item )

标签: javascript

解决方案


虽然我通常不喜欢代码缩写。||操作员确实可以方便地完成此类任务:

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 )

那将等于您的代码,并且由于函数名称,它更多地表达了实际发生的事情。


推荐阅读