Преобразование данных объекта с помощью рекурсии - PullRequest
1 голос
/ 21 января 2020

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

Это нужно делать с рекурсивом или нет что вы думаете, парень, пожалуйста, помогите мне

(извините за мой английский sh)

Это мои данные

const mock = [
  { $: { id: '001' } },
  {
    $: { id: '002' },
    question: [{
      $: { id: 'r001' },
      prompt: 'some-r001',
      choices: [{
        question: [
          {
            $: { id: 'r001-1' },
            prompt: 'some-r001-1',
            choices: [{
              question: [{
                $: { id: 'r001-1-1' },
                prompt: 'some-r001-1-1',
                choices: [""],
              }]
            }]
          },
          {
            $: { id: 'r001-2' },
            prompt: 'some-r001-2',
            choices: [""],
          },
        ]
      }]
    }]
  }
]

Я хочу преобразовать в это

const result = {
   'r001': {
     prompt: 'some-r001',
     next: ['r001-1', 'r001-2'],
   },
   'r001-1': {
     prompt: 'some-r001-1',
     next: ['r001-1-1'],
   }
   'r001-1-1': {
     prompt: 'some-r001-1-1',
     next: [],
   },
   'r001-2': {
     prompt: 'some-r001-2',
     next: [],
   },
}

1 Ответ

0 голосов
/ 22 января 2020

Вы можете плоский массив в объекте путем итерации и получения частей с помощью рекурсивного вызова функции.

const
    getFlat = (array, parent = []) => array.reduce((r, { question, choices, prompt, $: { id } = {} }) => {
        if (question) return { ...r, ...getFlat(question, parent) };
        if (choices) {
            parent.push(id);
            var next = [];
            return { ...r, [id]: { prompt, next }, ...getFlat(choices, next) };
        }
        return r;
    }, {}),
    mock = [{ $: { id: '001' } }, { $: { id: '002' }, question: [{ $: { id: 'r001' }, prompt: 'some-r001', choices: [{ question: [{ $: { id: 'r001-1' }, prompt: 'some-r001-1', choices: [{ question: [{ $: { id: 'r001-1-1' }, prompt: 'some-r001-1-1', choices: [""] }] }] }, { $: { id: 'r001-2' }, prompt: 'some-r001-2', choices: [""] }] }] }] }],
    result = getFlat(mock);


console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...