gpt4 book ai didi

javascript - 递归未完全遍历具有嵌套对象的对象

转载 作者:行者123 更新时间:2023-12-02 16:26:18 26 4
gpt4 key购买 nike

我打算编写一个模块,可以使用默认配置实例化,然后在初始化时使用自定义配置覆盖。配置对象具有嵌套对象,因此如果这些嵌套对象包含在自定义配置中,我需要遍历它们。我尝试通过递归调用 customize 来实现此目的。这适用于第一个嵌套对象,但遍历在该对象之后结束。这是为什么?我可以做什么来完全遍历包含嵌套对象的对象?

function Config(options) {

function customize(conf) {
if (conf && conf.constructor === Object) {
for (var prop in conf) {
if(conf[prop].constructor === Object) {
return customize.call(this[prop], conf[prop]);
} else {
if (this.hasOwnProperty(prop)){
this[prop] = conf[prop];
}
}
}
} else {
console.error('The first argument must be an object.');
return;
}
}

//Default config values
this.foo = 'default';
this.bar = {
foo: 'default'
};
this.baz = {
foo: 'default'
};

//Overide default config with custom config
if (options && options.constructor === Object) {
customize.call(this, options);
}
}

function TestModule(){
this.init = function(options){
this.config = (options && options.constructor === Object) ? new Config(options) : new Config();
return this;
};
}

console.log(
new TestModule().init({
foo: 'custom',
bar: {foo: 'custom'},
baz: {foo: 'custom'}
}).config
);

//RESULT
// {
// foo: 'custom',
// bar: {foo: 'custom'},
// baz: {foo: 'default'}
// }

最佳答案

这一行:

return customize.call(this[prop], conf[prop]);

发生在 for 循环内,因此您将在迭代每个项目之前返回。您的 return 语句应该位于循环之外。

关于javascript - 递归未完全遍历具有嵌套对象的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28652950/

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