Как сопоставить карту в React

Я пытаюсь сопоставить родительские комментарии, а затем в функции сопоставления я хочу сопоставить соответствующие вложенные дочерние комментарии, глубина которых составляет всего один уровень.

По какой-то причине, когда я пытаюсь это сделать, все вложенные дочерние комментарии отображаются ниже первого родительского комментария.

У меня есть два массива:

parentComments: [
{
  id: "1",
  comment: "First parent comment"
},
{
  id: "2",
  comment: "Second parent comment"
},
]

childComments: [
{
  id: "3",
  comment: "First child comment",
  parentCommentId: "1"
},
{
  id: "4",
  comment: "Second child comment",
  parentCommentId: "2"
},
]

Вот код, который я пытаюсь:

{parentComments.map((parentComment) => (
    <ul>
            {parentComment.comment}
            <li>
              {" "}
              {childComments.map((childComment) => (
                <>
                  {childComments.find(
                    (e) => e.parent_comment_id === comment.id
                  )
                    ? childComment.comment
                    : ""}
                </>
              ))}
            </li>
          </ul>
))}

Я ожидаю, что каждый родительский комментарий сопоставляется, если дочерний комментарий parentCommentId равен идентификатору сопоставляемого родительского комментария, он будет отображать дочерний комментарий под ним.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
34
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Сначала создайте новый массив, подобный этому, затем

let parentComments =[
  {
    id: "1",
    comment: "First parent comment"
  },
  {
    id: "2",
    comment: "Second parent comment"
  },
]

let childComments= [
  {
    id: "3",
    comment: "First child comment",
    parentCommentId: "1"
  },
  {
    id: "4",
    comment: "Second child comment",
    parentCommentId: "2"
  },
];
let mapArray =parentComments.map(p => ({
    ...p,
    childComments : childComments.filter(c => c.parentCommentId ==p.id)
}));
console.info(mapArray);
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

тогда вы можете попробовать

{parentComments.map((parentComment) => (
    <ul>
            {parentComment.comment}
            <li>
              {" "}
              {childComments.map((childComment) => (
                <>
                  childComment.comment
                    }
                </>
              ))}
            </li>
          </ul>
))}

Спасибо, Мохаммед, я попробую и дам вам знать, как я пойду.

herbie 22.03.2022 12:59

Это сработало отлично! Спасибо Мохаммед!

herbie 23.03.2022 02:31

Другие вопросы по теме