@dGololobov
начинающий

Как можно обработать массив объектов?

Пишу модуль тестов (вопрос и n вариантов ответов, но не суть...)
В общем из базы беру такой массив объектов:
arr = [
    {answer: 'вариант ответа 1 на вопрос 99', isRight: false, questionId: 99, questionText: 'Выберите правильный вариант', testId: 1030},
    {answer: 'вариант ответа 2 на вопрос 99', isRight: true, questionId: 99, questionText: 'Выберите правильный вариант',  testId: 1030},
    {answer: 'вариант ответа 3 на вопрос 99', isRight: false, questionId: 99, questionText: 'Выберите правильный вариант',  testId: 1030},
    {answer: 'вариант ответа 4 на вопрос 99', isRight: false, questionId: 99, questionText: 'Выберите правильный вариант',  testId: 1030},
    {answer: 'вариант ответа 1 на вопрос 100', isRight: false, questionId: 100, questionText: 'А тут нужен правильный ответ',  testId: 1030},
    {answer: 'вариант ответа 2 на вопрос 100', isRight: false, questionId: 100, questionText: 'А тут нужен правильный ответ',  testId: 1030},
    {answer: 'вариант ответа 3 на вопрос 100', isRight: false, questionId: 100, questionText: 'А тут нужен правильный ответ',  testId: 1030},
    {answer: 'вариант ответа 4 на вопрос 100', isRight: true, questionId: 100, questionText: 'А тут нужен правильный ответ',  testId: 1030},
]


Нужна функция, которая вернет этот же массив в другом формате:

test = {
    testId: 1030,
    questions: [
          {
        questionId: 99,
        questionText: 'Выберите правильный вариант',
        answers: [
           {answer: 'вариант ответа 1 на вопрос 99', isRight: false},
           {answer: 'вариант ответа 2 на вопрос 99', isRight: true},
           {answer: 'вариант ответа 3 на вопрос 99', isRight: false},
           {answer: 'вариант ответа 4 на вопрос 99', isRight: false},
        ],
       },
       {
        questionId: 100,
        questionText: 'А тут нужен правильный ответ',
        answers: [
           {answer: 'вариант ответа 1 на вопрос 100', isRight: false},
           {answer: 'вариант ответа 2 на вопрос 100', isRight: false},
           {answer: 'вариант ответа 3 на вопрос 100', isRight: false},
           {answer: 'вариант ответа 4 на вопрос 100', isRight: true},
        ],
      },
    ]
}
  • Вопрос задан
  • 136 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const groupQuestions = arr => ({
  testId: arr[0].testId,
  questions: Object.values(arr.reduce((acc, n) => {
    const id = n.questionId;
    (acc[id] = acc[id] || {
      questionId: id,
      questionText: n.questionText,
      answers: [],
    }).answers.push({
      answer: n.answer,
      isRight: n.isRight,
    });
    return acc;
  }, {})),
});
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
24 нояб. 2024, в 03:11
500 руб./за проект
24 нояб. 2024, в 01:35
5000 руб./за проект
24 нояб. 2024, в 01:24
500 руб./за проект