使用递归转换对象数据
Transform object data with recursive
我尝试用递归转换数据但是我不能,我是递归的新手请帮助我
是否需要用递归做,或者不是你想的那样,
请帮助我
(对不起我的英文)
这是我的数据
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: [],
},
}
你可以扁平化对象中的数组,通过函数的递归调用迭代和获取部分。
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; }
我尝试用递归转换数据但是我不能,我是递归的新手请帮助我
是否需要用递归做,或者不是你想的那样, 请帮助我
(对不起我的英文)
这是我的数据
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: [],
},
}
你可以扁平化对象中的数组,通过函数的递归调用迭代和获取部分。
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; }