在满足条件后,如何删除阵列中特定键的所有对象?

问题描述 投票:3回答:1

我有一个对象的数组(选项),其中每个对象也有一个带对象的数组(答案)。在那些对象形式的答案数组中,我有了受访者的对象。现在,如果他的所有答案都为空,我想删除受访者表格的答案。

对象数组:

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()来获取这些答案,并在此过滤器之后,但我不知道如何为不同数组中的一个响应者创建此条件。

javascript
1个回答
3
投票

您可以收集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; }
© www.soinside.com 2019 - 2024. All rights reserved.