gpt4 book ai didi

Javascript 嵌套对象默认回退选项

转载 作者:行者123 更新时间:2023-11-30 19:16:38 25 4
gpt4 key购买 nike

我在 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 是可接受的值,不应被默认值覆盖。
  • 自定义对象中作为默认值缺失的值不会造成任何危害,不需要处理。

我到目前为止所做的尝试

最佳答案

您可以通过检查对象的值(如果是对象)并检查嵌套对象或如果键不存在则分配值来采用递归方法。

function update(object, fallback) {
Object
.entries(fallback)
.forEach(([k, v]) => {
if (v && typeof v === 'object') {
update(object[k] = object[k] || (Array.isArray(v) ? [] : {}), v);
} else if (!(k in object)) {
object[k] = v;
}
});
}

var object = { fields: { markdown: { preview: { delay: null, custom: "hello" }, revisions: { path: "revisions/markdown", limit: 5 } } } },
fallback = { fields: { markdown: { preview: { delay: 5, css: "https://example.com/my/style.css" }, revisions: { path: "revisions", limit: 10 } } } };

update(object, fallback);

console.log(object);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于Javascript 嵌套对象默认回退选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57918378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com