lodash:数组过滤和对象排除

lodash: array filter and exclude by object

我有 Array a 个问题

[
  {id: 1,name: "Question 1"},
  {id: 2,name: "Question 2"},
  {id: 3,name: "Question 3"},
]

答案Array b,其中 属性 question_id 引用 属性 id Array a:

[
  {id: 1, question_id: 2,name: "My Answer to Question 2"}
]

使用 lodash,我想过滤 Array a 以排除所有引用它的 Answers,期望输出:

[
  {id: 1,name: "Question 1"},
  {id: 3,name: "Question 3"},
]
var questions = [
    {id: 1,name: "Question 1"},
    {id: 2,name: "Question 2"},
    {id: 3,name: "Question 3"},
];

var answers = [
    {id: 1, question_id: 2,name: "My Answer to Question 2"}
];

var filtered = _.filter(questions, isNotReferencedByAnyAnswer);

function isNotReferencedByAnyAnswer(question) {
    return _.findIndex(answers, {'question_id': question.id}) === -1;
}

简短回答 lodash.differenceWith

arr = [
       {id: 1,name: "Question 1"},
       {id: 2,name: "Question 2"},
       {id: 3,name: "Question 3"},
]
arr1 = [
  {id: 1, question_id: 2,name: "My Answer to Question 2"}
]
_.differenceWith(arr, arr1, (arrVal, othVal) => arrVal.id === othVal.question_id)

// result

[ { id: 1, name: 'Question 1' }, { id: 3, name: 'Question 3' } ]