繁体   English   中英

在弄平对象时需要清楚

[英]Need clarity on flattening a object

我正在为我的应用程序展平对象过程。 我有一个谷歌的功能。 但是我无法理解其功能。 有人帮我吗?

这是我对细节的怀疑:

var object = {
    "address" : {
        "name" : "siva"
    }
};


var flatter = function (ob) {
    var newObj = {};
    for(var i in ob) { //first time will be address but it will update immediately
        console.log(i,'1')
        if((typeof ob[i]) == 'object') {
            var cObj = flatter(ob[i]); // i am calling 2nd time, but still address is exist..how?
            for(var x in cObj) {
                console.log(i, x,'2')
                newObj[i + '.' + x] = cObj[x]; //now `i` became name, but i am getting address with name where the address label stored?
            }
        } 
        else {
            newObj[i] = ob[i];
        }

        if (($.type(ob[i])) == 'null') {
            newObj[i] = ob[i];
        }
    }
    return newObj;
};

console.log(flatter(object)); // i am getting proper result as : address.name: "siva"

//观看现场演示。

现场演示

这是利用递归的功能。

您的第一句话是:“第一次是地址,但会立即更新。” 我不确定您的意思。 在此示例中,我仅等于“地址”。

当您说“我正在第二次打电话,但地址仍然存在..如何?” i的值实际上仍然是地址。 您只能使用等于i的地址在循环中运行一次,因为这是对象的唯一属性。 您可以看到,在您递归打电话之前,我实际上仍然在讲话:

            console.log('i', i);       // address
            var cObj = flatter(ob[i]); 

接下来,当您说地址现在是名称时,实际上它仍然是地址,并且x等于名称。 您可以在下面看到此内容:

            for(var x in cObj) {
                newObj[i + '.' + x] = cObj[x];
                console.log('i: ', i);    // i: address
                console.log('x: ', x);    // x: name

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM