【发布时间】:2019-09-13 06:31:32
【问题描述】:
我在 javascript 中有一个嵌套的选项对象。为它们提供默认值的最佳方式是什么?
使用 ajax 从 json 文件中读取自定义 javascript 对象:
{
"fields": {
"markdown": {
"preview": {
"delay": null,
"custom": "hello"
},
"revisions": {
"path": "revisions/markdown",
"limit": 5
}
}
}
}
未设置值时作为后备的默认选项:
{
"fields": {
"markdown": {
"preview": {
"delay": 5,
"css": "https://example.com/my/style.css"
},
"revisions": {
"path": "revisions",
"limit": 10
}
}
}
}
预期结果
保留自定义对象中的所有内容并使用默认值完成它,在这种情况下为"css"。
{
"fields": {
"markdown": {
"preview": {
"delay": null,
"css": "https://example.com/my/style.css",
"custom": "hello"
},
"revisions": {
"path": "revisions/markdown",
"limit": 5
}
}
}
}
注意事项:
- 自定义对象可能不包括所有嵌套值。如果缺少值,则应应用默认值。
- Null、empty 和 0 是可接受的值,不应被默认值覆盖。
- 自定义对象中缺少默认值的值不会造成任何损害,也不需要处理。
我到目前为止所做的尝试
【问题讨论】:
-
你可以使用图书馆吗?
jQuery.extend()有一个deep将递归的选项。 Lodash 有_.merge()。 -
@Barmar 我不想这样做,因为我已经在 Vue 中使用了它。但总的来说,这是很好的信息。谢谢!
标签: javascript object merge nested default