我有一个对象的数组(选项),其中每个对象也有一个带对象的数组(答案)。在那些对象形式的答案数组中,我有了受访者的对象。现在,如果他的所有答案都为空,我想删除受访者表格的答案。
对象数组:
options [
{
optionId: 1,
answers: [
{
respondent: { id: 1, displayName: 'John Doe' },
answer: null
},
{
respondent: { id: 2, displayName: 'Jane Doe' },
answer: true
}
]
},
{
optionId: 2,
answers: [
{
respondent: { id: 1, displayName: 'John Doe' },
answer: null
},
{
respondent: { id: 2, displayName: 'Jane Doe' },
answer: true
}
]
}
]
所以基本上在这种情况下我希望实现:
options [
{
optionId: 1,
answers: [
{
respondent: { id: 2, displayName: 'Jane Doe' },
answer: true
}
]
},
{
optionId: 2,
answers: [
{
respondent: { id: 2, displayName: 'Jane Doe' },
answer: true
}
]
}
]
因为所有受访者的1个答案都是空的。
首先,我想在选项数组上使用forEach()来获取这些答案,并在此过滤器之后,但我不知道如何为不同数组中的一个响应者创建此条件。
您可以收集id
中具有肯定答案的所有Set
,然后过滤所有答案。
var options = [{ optionId: 1, answers: [{ respondent: { id: 1, displayName: 'John Doe' }, answer: null }, { respondent: { id: 2, displayName: 'Jane Doe' }, answer: true }] }, { optionId: 2, answers: [{ respondent: { id: 1, displayName: 'John Doe' }, answer: null }, { respondent: { id: 2, displayName: 'Jane Doe' }, answer: true }] }],
ids = new Set;
options.forEach(({ answers }) =>
answers.forEach(({ respondent: { id }, answer }) => answer && ids.add(id)));
options.forEach(o =>
o.answers = o.answers.filter(({ respondent: { id } }) => ids.has(id)));
console.log(options);
.as-console-wrapper { max-height: 100% !important; top: 0; }