【问题标题】:Transform object data with recursive使用递归转换对象数据
【发布时间】:2020-01-21 20:24:46
【问题描述】:

我尝试使用递归转换数据,但我不能,我是递归的新手,请帮助我

它是否需要与递归有关,或者不是你想的那样, 请帮帮我

(对不起我的英语)

这是我的数据

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: [],
   },
}

【问题讨论】:

    标签: javascript recursion transform


    【解决方案1】:

    您可以flat通过函数的递归调用迭代和获取对象中的数组。

    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; }

    【讨论】:

      猜你喜欢
      • 2017-03-26
      • 1970-01-01
      • 1970-01-01
      • 2010-10-24
      • 1970-01-01
      • 1970-01-01
      • 2019-09-07
      • 1970-01-01
      • 2017-05-20
      相关资源
      最近更新 更多