繁体   English   中英

如何使用lodash或javascript从对象数组复制其所有父对象

[英]How to copy all its parent objects from the array of objects using the lodash or javascript

嗨,我有一个这样的对象,我想复制其所有的Parent对象,

permisions= [
 {
        "parent_id": "",
        "id": "DISTRIBUTOR1",
        "city":01
        "permission": "NO",
    },
    {
        "parent_id": "",
        "id": "DISTRIBUTOR1",
        "city":02
        "permission": "NO"
    },
    {
        "parent_id": "",
        "id": "DISTRIBUTOR1",
        "city":03 
        "permission": "Yes"
    },
    {
        "parent_id": "",
        "id": "DISTRIBUTOR1",
        "city":04
        "permission": "Yes"

    },
    {
        "parent_id": "DISTRIBUTOR1",
        "id": "DISTRIBUTOR2",
        "city":0111            
        "permission": "NO"
    },
    {
        "parent_id": "DISTRIBUTOR1",
        "id": "DISTRIBUTOR2",
        "city":0112                
        "permission": "Yes"
    },


    {
        "parent_id": "DISTRIBUTOR2",
        "id": "DISTRIBUTOR3",
        "city":0333                  
        "permission": "Yes"
    },
    {
        "parent_id": "DISTRIBUTOR2",
        "id": "DISTRIBUTOR3",
        "city":01111                 
        "permission": "Yes"
    },
    {
        "parent_id": "",
        "id": "DISTRIBUTOR4",
        "city":0444                
        "permission": "Yes"
    },
    {
        "parent_id": "",
        "id": "DISTRIBUTOR5",
        "city":0555              
        "permission": "Yes"
    }
]

如果我选择id:Distubutor3,它包含了parent_id:“ DISTRIBUTOR2”,DISTRIBUTOR2包含了父对象_id:DISTRIBUTOR1,因此它必须复制所有父对象直到结束,在这方面,有人可以帮助我。 输出应该是这样的,

result=[   {
        "parent_id": "",
        "id": "DISTRIBUTOR1",
        "city":01
        "permission": "NO",
    },
    {
        "parent_id": "",
        "id": "DISTRIBUTOR1",
        "city":02
        "permission": "NO"
    },
    {
        "parent_id": "",
        "id": "DISTRIBUTOR1",
        "city":03 
        "permission": "Yes"
    },
    {
        "parent_id": "",
        "id": "DISTRIBUTOR1",
        "city":04
        "permission": "Yes"

    },
    {
        "parent_id": "DISTRIBUTOR1",
        "id": "DISTRIBUTOR2",
        "city":0111            
        "permission": "NO"
    },
    {
        "parent_id": "DISTRIBUTOR1",
        "id": "DISTRIBUTOR2",
        "city":0112                
        "permission": "Yes"
    },

    {
        "parent_id": "DISTRIBUTOR2",
        "id": "DISTRIBUTOR3",
        "city":0333              
        "permission": "Yes"
    },
        {
        "parent_id": "DISTRIBUTOR2",
        "id": "DISTRIBUTOR3",
        "city":01111                 
        "permission": "Yes"
    }]

 var permissions = [{"parent_id":"","id":"DISTRIBUTOR1","city":1,"permission":"NO"},{"parent_id":"","id":"DISTRIBUTOR1","city":2,"permission":"NO"},{"parent_id":"","id":"DISTRIBUTOR1","city":3,"permission":"Yes"},{"parent_id":"","id":"DISTRIBUTOR1","city":4,"permission":"Yes"},{"parent_id":"DISTRIBUTOR1","id":"DISTRIBUTOR2","city":73,"permission":"NO"},{"parent_id":"DISTRIBUTOR1","id":"DISTRIBUTOR2","city":74,"permission":"Yes"},{"parent_id":"DISTRIBUTOR2","id":"DISTRIBUTOR3","city":219,"permission":"Yes"},{"parent_id":"DISTRIBUTOR2","id":"DISTRIBUTOR3","city":585,"permission":"Yes"},{"parent_id":"","id":"DISTRIBUTOR4","city":292,"permission":"Yes"},{"parent_id":"","id":"DISTRIBUTOR5","city":365,"permission":"Yes"}]; // get the ID number ("DISTRIBUTOR???" return "???") function idNum(id) { return parseInt(id.substr(11)); } function makeResult(perm, id){ var num = idNum(id); return perm.map(function(p){ var n = idNum(p.id); if(n < num && n != 1) // if the current object's ID is 1 < ID < max p.parent_id = p.parent_id || ("DISTRIBUTOR" + (n-1)); // fill id if it's not already set return p; }); } var res = makeResult(permissions, "DISTRIBUTOR5"); // set all objects that have ID (1 < ID < 5) console.log(res) 

注意:例如,如果您调用makeResult(permissions, "DISTRIBUTOR5"); 并且在数组中没有任何具有"DISTRIBUTOR2"的对象,那么该对象"DISTRIBUTOR3"parent_id仍将设置为"DISTRIBUTOR2"

编辑:我想你的意思是,只有那些存在父元素的元素,以及元素本身,才应包含在新的输出数组中。

如果是这样,请尝试以下操作:

var filterParents = function(obj){

    var mappings = {};

    permisions.forEach(function(perm){

        if( !mappings[perm.id] )
            mappings[perm.id] = [];

        mappings[perm.id].push( perm );
    });

    var output = [];
    output.push( obj );


    while(obj.parent_id && obj.parent_id != '' )
    {
        output = output.concat( mappings[ obj.parent_id ] );
        obj = mappings[ obj.parent_id ] [ 0 ];
    }

    return output;

};

假设父母ID的每个元素都具有相同的祖父母ID。

暂无
暂无

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

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