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

如何使用lodash或javascript从对象数组复制其所有父对象,javascript,arrays,node.js,underscore.js,lodash,Javascript,Arrays,Node.js,Underscore.js,Lodash,嗨,我有一个这样的对象我想复制它的所有父对象 permisions= [ { "parent_id": "", "id": "DISTRIBUTOR1", "city":01 "permission": "NO", }, { "parent_id": "", "id": "DISTRIBUTOR1", "city":02 "permission": "

嗨,我有一个这样的对象我想复制它的所有父对象

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它包含父对象id:“DISTRIBUTOR2”DISTRIBUTOR2包含父对象\u 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=[{“家长id”:““id”:“DISTRIBUTOR1”,“城市”:1,“权限”:“NO”},{“家长id”:“city”:2,“权限”:“NO”},{“家长id”:“id”:“id”:“DISTRIBUTOR1”,“city”:3,“权限”:“Yes”},{“家长id”:“id”:“id”:“DISTRIBUTOR1”,“city”:4,“权限”:“Yes”},{“家长id”:“DISTRIBUTOR1”,“id”:“DISTRIBUTOR2”,“city”:73,“权限”:“否”}、{“家长id”:“经销商1”、“id”:“经销商2”、“城市”:74、“权限”:“是”}、{“家长id”:“经销商2”、“id”:“经销商3”、“城市”:219、“权限”:“是”}、{“家长id”:“经销商2”、“id”:“经销商3”、“城市”:585,“权限”:“是”}、{“家长id”:“id”:“权限”:“经销商4”、“城市”:292、“权限”:“是”}、{“家长id”:“id”:“权限”:“是”分销商5,“城市”:365,“许可”:“是”}];
//获取ID号(“分销商?”“退货”)
函数idNum(id){
返回parseInt(id.substr(11));
}
函数makeResult(perm,id){
var num=idNum(id);
返回perm.map(函数(p){
var n=idNum(p.id);
if(nconsole.log(res)
Edit:我认为您的意思是,新的输出数组中只应包括其父元素存在的元素以及元素本身

如果是,请尝试以下方法:

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。

是否要检查数组中是否存在该id,或者只是以任何方式进行赋值。我的意思是,如果没有
DISTRIBUTOR1
是否应该
DISTRIBUTOR2
获取该属性?如果例如
DISTRIBUTOR2
不存在,请uld
DISTRIBUTOR3
获取属性
DISTRIBUTOR1
?@ibrahimmahrir否如果DISTRIBUTOR3不包含父id,则其不应复制任何内容,@ibrahimmahrir DISTRIBUTOR3包含父id作为DISTRIBUTOR2,DISTRIBUTOR2包含父id作为DISTRIBUTOR1,因此它必须复制所有DISTRIBUTOR2和DISTRIBUTOR1对象。是id吗始终以
DISTRIBUTOR???
的形式,其中
是数字。对于DISTRIBUTOR 5,它不包含父id,因此它将仅返回id为DISTRIBUTOR 5的对象