如何使用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(n console.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
不存在,请uldDISTRIBUTOR3
获取属性DISTRIBUTOR1
?@ibrahimmahrir否如果DISTRIBUTOR3不包含父id,则其不应复制任何内容,@ibrahimmahrir DISTRIBUTOR3包含父id作为DISTRIBUTOR2,DISTRIBUTOR2包含父id作为DISTRIBUTOR1,因此它必须复制所有DISTRIBUTOR2和DISTRIBUTOR1对象。是id吗始终以DISTRIBUTOR???
的形式,其中?
是数字。对于DISTRIBUTOR 5,它不包含父id,因此它将仅返回id为DISTRIBUTOR 5的对象