[英]How to remove unmatched objects from array of objects using javascript or lodash
[英]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.