2017-02-02 6 views
0

Привет У меня есть объект, как это я хочу, чтобы скопировать все свои родительские объекты,Как скопировать все свои родительские объекты из массива объектов с помощью lodash или яваскрипта

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" 
    } 
] 

Если я выбрать идентификатор : Distubutor3 имеет содержит parent_id: «DISTRIBUTOR2» и DISTRIBUTOR2 содержит родительский _id: DISTRIBUTOR1 поэтому он должен скопировать все родительские объекты до конца, может anybdy помочь мне в этом. вывод должен быть таким,

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" 
    }] 
+0

Вы хотите проверить, существует ли этот идентификатор в массиве или просто выполнить какое-либо задание. Я имею в виду, если нет 'DISTRIBUTOR1', ​​если' DISTRIBUTOR2' получит это свойство или нет? –

+0

И если, например, 'DISTRIBUTOR2' не существует, следует ли' DISTRIBUTOR3' взять свойство 'DISTRIBUTOR1'? –

+0

@ibrahimmahrir нет, если DISTRIBUTOR3 не содержит parent_id, его не должно копировать ничего, – Jeevan

ответ

0

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" в любом случае.

+0

Нет в случае DISTRIBUTOR5 он не содержит parent_id, поэтому он возвращает только свой объект с id: DISTRIBUTOR5 – Jeevan

0

Редактировать: Я думаю, что вы хотите сказать, что только те элементы, родители которых присутствуют вместе с самим элементом, должны быть включены в новый выходной массив.

Если это так, попробуйте это:

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; 

}; 

Это при условии, что каждый элемент идентификатор родителя будет иметь тот же идентификатор GrandParent.