Получить самый глубокий комментарий каждого родительского комментария в ReactJS - PullRequest
0 голосов
/ 14 мая 2019

У меня есть массив в React, подобный этому.

{  
"comments":[  
{  
  "id":1,
  "comment_text":"asdasdadasdsadsadadsa",
  "author":"adsfasdasdsad",
  "post_id":1,
  "children":[]
},
{  
  "id":2,      
  "comment_text":"idlsfg",
  "author":"asdsdasdad",
  "post_id":1,
  "children":[  
    {  
      "id":3,
      "comment_text":"fdsfdsfdsfsdfsfsdf",
      "author":"sdfdsfdsfdsfds",
      "post_id":1,
      "children":[  
        {  
          "id":4,
          "comment_text":"fdsfdsfdsdsfdsfds",
          "author":"sdfsdfdsfsdfdsfds",
          "post_id":1,
          "children":[  
            {  
              "id":5,
              "comment_text":"sdfdsfdsfdsfdssdfsdfdsfdsfdsfds",
              "author":"sdfsdfdsfdsfdsf",
              "post_id":1,
              "children":[]
            },
            {  
              "id":7,
              "comment_text":"sdfdsfdsfdsfdssdfsdfdsfdsfdsfds",
              "author":"sdfsdfdsfdsfdsf",
              "post_id":1,
              "children":[]
            }
           ]
          },
          {
          "id":6,
          "comment_text":"fdsfdsfdsdsfdsfds",
          "author":"sdfsdfdsfsdfdsfds",
          "post_id":1,
          "children":[]
          }
        ]
       }
     ]
   }
  ]
 }

Теперь массив результатов будет идентификатором самого глубокого комментария в этой родительской ветке комментариев.Результат должен быть только из самых глубоких комментариев

[[1], [5,7]]

Теперь я использовал рекурсию, чтобы получить глубину комментария, но как получить этот массив?

1 Ответ

1 голос
/ 14 мая 2019

Мы можем использовать рекурсию здесь

var obj ={  
"comments":[  
{  
  "id":1,
  "comment_text":"asdasdadasdsadsadadsa",
  "author":"adsfasdasdsad",
  "post_id":1,
  "children":[]
},
{  
  "id":2,      
  "comment_text":"idlsfg",
  "author":"asdsdasdad",
  "post_id":1,
  "children":[  
    {  
      "id":3,
      "comment_text":"fdsfdsfdsfsdfsfsdf",
      "author":"sdfdsfdsfdsfds",
      "post_id":1,
      "children":[  
        {  
          "id":4,
          "comment_text":"fdsfdsfdsdsfdsfds",
          "author":"sdfsdfdsfsdfdsfds",
          "post_id":1,
          "children":[  
            {  
              "id":5,
              "comment_text":"sdfdsfdsfdsfdssdfsdfdsfdsfdsfds",
              "author":"sdfsdfdsfdsfdsf",
              "post_id":1,
              "children":[]
            },
            {  
              "id":7,
              "comment_text":"sdfdsfdsfdsfdssdfsdfdsfdsfdsfds",
              "author":"sdfsdfdsfdsfdsf",
              "post_id":1,
              "children":[]
            }
           ]
          },
          {
          "id":6,
          "comment_text":"fdsfdsfdsdsfdsfds",
          "author":"sdfsdfdsfsdfdsfds",
          "post_id":1,
          "children":[]
          }
        ]
       }
     ]
   }
  ]
 }

function getId(obj){
  const {id, children }  = obj
  if(children && children.length){
    return children.map(getId)
  }
  return id;
}
function getArrayDepth(value) {
  return Array.isArray(value) ? 
    1 + Math.max(...value.map(getArrayDepth)) :
    0;
}

var output = obj.comments.map(getId).map(k => {
  if(Array.isArray(k)){
    var d= getArrayDepth(k)
    return k.flat(d-2).find(a => Array.isArray(a))
  }
 return [k]
})
console.log(otput)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...