Javascript 使用递归属性迭代保留属性结构
这段代码面临的问题是,它没有使用相同的结构来声明回调中的属性 例如,如果函数以options.foo.bar属性结束,则在回调中它将声明self.bar,但我希望它保留相同的结构,因此它应该是self.foo.bar 我怎样才能做到这一点Javascript 使用递归属性迭代保留属性结构,javascript,object,recursion,properties,Javascript,Object,Recursion,Properties,这段代码面临的问题是,它没有使用相同的结构来声明回调中的属性 例如,如果函数以options.foo.bar属性结束,则在回调中它将声明self.bar,但我希望它保留相同的结构,因此它应该是self.foo.bar 我怎样才能做到这一点 function forEachProperty(object, callback) { for (var property in object) { if (!object.hasOwnProperty(property)) {
function forEachProperty(object, callback) {
for (var property in object) {
if (!object.hasOwnProperty(property)) {
continue;
}
if (object[property].constructor === Object) {
this.forEachProperty(object[property], callback);
} else {
callback(object, property);
}
}
}
// Usage
forEachProperty(options, function (object, property) {
if (property !== 'timeUrl' && property !== 'element') {
self[property] = object[property];
}
});
试试这个:
function forEachProperty(loc,object, callback) {
for (var property in object) {
if (!object.hasOwnProperty(property)) {
continue;
}
if (object[property].constructor === Object) {
if(loc[property]===undefined)loc[property]={};
this.forEachProperty(loc[property],object[property], callback);
} else {
callback(loc,object, property);
}
}
}
var self={bar:{baz:999}};
var options={test:'hello world',bar:{foo:8}}
// Usage
forEachProperty(self,options, function (loc,object, property) {
if (property !== 'timeUrl' && property !== 'element') {
loc[property] = object[property];
}
});
问题是,当我有一个对象var self={bar:'test',baz:'test'},并且options对象只有bar属性时,它只将bar属性设置为self,它还应该保留baz属性。在您的情况下,baz属性被删除,而只有bar属性被设置。在没有baz属性的情况下,如何从选项中保留baz属性声明loc[property]=object[property];应仅覆盖loc中的属性。因此,如果self有{bar:1,baz:2},并且传递给函数的options对象有{bar:999},那么self现在应该是{bar:999,baz:2},而不是{bar:999}。有点像将它们合并在一起。确保您正在检索自我,而不是选项。因为我试过了,得到了options={bar:999}和self={bar:999,baz:2},我认为只有当对象有2+层深时才会出现问题。如果选项为{bar:{foo:1;bar:2},baz:3},则bar.bar将消失。