【发布时间】:2018-11-11 01:46:52
【问题描述】:
我正在尝试创建一个循环遍历配置对象的递归函数,该对象包含必须设置的键,这与稍后的 appConfig 进行比较,后者必须匹配 @ 内的所有键(嵌套) 987654323@
const _ = window._
const UNSET_CONFIG_VAR = 'UNSET'
let config = {
logging: {
hasConsole: UNSET_CONFIG_VAR,
hasSyslog: UNSET_CONFIG_VAR,
processName: UNSET_CONFIG_VAR,
inner: {
test: UNSET_CONFIG_VAR
}
}
}
const unsetConfig = _.clone(config)
function initialize (appConfig) {
const walkConfig = (currentConfigLevel, previousPaths = []) => {
for (const [key, value] of Object.entries(currentConfigLevel)) {
if (_.isObject(value)) {
previousPaths.push(key)
walkConfig(currentConfigLevel[key], previousPaths)
}
const path = previousPaths.length !== 0 ? previousPaths.join('.') : key
if (!_.get(appConfig, path)) {
throw new Error(`Config was missing: ${path}`)
}
}
}
walkConfig(unsetConfig)
}
initialize({
logging: {
hasConsole: true,
hasSyslog: true,
processName: true,
inner: {
as: true
}
}
})
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>
预期的输出是会引发错误,正如您在 initialize 函数中看到的那样,logging.inner 中缺少 test 键。
但是没有抛出错误。
我现在已经在不同的设置中尝试过了,但我有点卡住了。
【问题讨论】:
-
使用调试器并单步调试您的代码。
-
阅读ericlippert.com/2014/03/05/how-to-debug-small-programs 以获取有关如何调试代码的提示。我建议您学习如何在 Google、Firefox 或您使用的任何浏览器中使用开发人员工具。
标签: javascript loops object recursion lodash