使用递归 属性 迭代保留 属性 结构

Retain property structure with recursive property iteration

我在处理这段代码时遇到的问题是它没有使用相同的结构来声明回调中的属性。

例如,如果函数以 属性 options.foo.bar 结束,在回调中它会声明 self.bar,但我希望它保留相同的结构,所以它应该是 self.foo.bar.

我怎样才能做到这一点?

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];
    }
});