Подсчитать количество потоков в родительском комментарии в ReactJS - PullRequest
2 голосов
/ 14 мая 2019

У меня есть массив в React, как это.

{  
"comments":[  
{  
  "id":1,
  "comment_text":"asdasdadasds",
  "author":"adsfas",
  "post_id":1,
  "children":[]
},
{  
  "id":2,
  "comment_text":"idlsfgh",
  "author":"asdsda",
  "post_id":1,
  "children":[  
    {  
      "id":3,
      "comment_text":"fdsfdsfdsf",
      "author":"sdfdsf",
      "post_id":1,
      "children":[  
        {  
          "id":4,
          "comment_text":"fdsfdsfd",
          "author":"sdfsdfdsfsd",
          "post_id":1,
          "children":[]
        }
      ]
    }
   ]
  }
 ]
}

Теперь я хочу подсчитать общее количество ответов на каждый родительский комментарий. Итак, вывод массива -

{
 "result":[0, 2]
}

Я использую Mongo, Express, React, NodeJS. Я пробовал много вещей, таких как использование карты в React, но я не могу понять, как это сделать правильно. Можете ли вы помочь мне с этим.

1 Ответ

2 голосов
/ 14 мая 2019

Вы можете сделать это с помощью рекурсии.

  • Создайте функцию getCount, которая принимает объект и count (предыдущий счет) в качестве аргумента.
  • Проверьте, не имеет ли данный объект этой функции потомков, затем верните 0
  • В противном случае вызовите функцию рекурсивно для всех дочерних элементов и верните счетчик того ребенка, чье значение max, используя Math.max(). Также добавьте 1 к результату, который будет подсчетом родителя.
  • Наконец, используйте map() для obj.comments вызова getCount для каждого элемента с count=0

const obj = { "comments":[ { "id":1, "comment_text":"asdasdadasds", "author":"adsfas", "post_id":1, "children":[] }, { "id":2, "comment_text":"idlsfgh", "author":"asdsda", "post_id":1, "children":[ { "id":3, "comment_text":"fdsfdsfdsf", "author":"sdfdsf", "post_id":1, "children":[ { "id":4, "comment_text":"fdsfdsfd", "author":"sdfsdfdsfsd", "post_id":1, "children":[] } ] } ] } ] }

let res = obj.comments.map(x => getCount(x));

function getCount(obj,count=0){
  if(!obj.children.length) return 0;
  return Math.max(...obj.children.map(x => getCount(x)+1))
}
console.log(res)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...