const comments = [ { 'id': 1, 'origin_id': 0 }, { 'id': 2, 'origin_id': 0 }, { 'id': 3, 'origin_id': 2 }, { 'id': 4, 'origin_id': 2 }, { 'id': 5, 'origin_id': 3 }, { 'id': 6, 'origin_id': 3 }, { 'id': 7, 'origin_id': 0 }, { 'id': 8, 'origin_id': 0 }, { 'id': 9, 'origin_id': 0 }, { 'id': 10, 'origin_id': 0 }, ]; // or? data structure somthing like this? i dont konw how to use such order and depth. const comments = [ { 'id': 1, 'origin_id': 0, 'reply_order': 0, 'reply_depth': 0 }, { 'id': 2, 'origin_id': 0, 'reply_order': 0, 'reply_depth': 0 }, { 'id': 3, 'origin_id': 2, 'reply_order': 0, 'reply_depth': 0 }, { 'id': 4, 'origin_id': 2, 'reply_order': 0, 'reply_depth': 0 }, { 'id': 5, 'origin_id': 3, 'reply_order': 0, 'reply_depth': 0 }, { 'id': 6, 'origin_id': 3, 'reply_order': 0, 'reply_depth': 0 }, { 'id': 7, 'origin_id': 0, 'reply_order': 0, 'reply_depth': 0 }, { 'id': 8, 'origin_id': 0, 'reply_order': 0, 'reply_depth': 0 }, { 'id': 9, 'origin_id': 0, 'reply_order': 0, 'reply_depth': 0 }, { 'id': 10, 'origin_id': 0, 'reply_order': 0, 'reply_depth': 0 }, ];quiero algún algoritmo algo así como comentarios en comentario. ¿Es eso posible con solo esa cantidad de datos?
si alguien conoce alguna forma mejor de implementar esos objetivos, por favor, dígame.
Quiero un concepto de esto. cualquier código lang estaría bien conmigo. pero prefiero PHP y JS.
const comments = [ { 'id': 1, 'origin_id': 0 }, { 'id': 2, 'origin_id': 0 }, { 'id': 3, 'origin_id': 2 }, { 'id': 4, 'origin_id': 2 }, { 'id': 5, 'origin_id': 3 }, { 'id': 6, 'origin_id': 3 }, ]; // result i expected; const result_comments = [ { 'id': 1, 'origin_id': 0 }, { 'id': 2, 'origin_id': 0, 'children': [{ 'id': 3, 'origin_id': 2, 'children': [{ 'id': 5, 'origin_id': 3 }, { 'id': 6, 'origin_id': 3 },] }, { 'id': 4, 'origin_id': 2 }] }, ];El objeto anidado aquí es básicamente como un árbol y los comentarios se convierten en nodos de árbol. primero, cree un diccionario con la propiedad de los niños y luego asigne los niños a partir de él.
la identificación de los comentarios se crea en orden ascendente, por lo que no necesita volver a ordenarlos después de crearlos.
// assuming that id are sorted, else you have to sort comments by id. const comments = [ { 'id': 1, 'origin_id': 0 }, { 'id': 2, 'origin_id': 0 }, { 'id': 3, 'origin_id': 2 }, { 'id': 4, 'origin_id': 2 }, { 'id': 5, 'origin_id': 3 }, { 'id': 6, 'origin_id': 3 }, ]; // creating dictinary where key is id and value is object with added children property let dic = comments.reduce((acc, obj) => (acc[obj.id] = {...obj, children : [] }, acc), {}); // initial set let treeRoot = {'id': 0, 'origin_id': 0 , children : []}; // adding in dictionary so i can add origin_id 0 to tree root dic[treeRoot.id] = treeRoot; // populating the childrens comments.forEach(obj => dic[obj.origin_id].children.push(dic[obj.id])); // if you want the array that inside treeRoot.children console.log(treeRoot);