2个对象和布尔值之间的复杂过滤器

时间:2017-12-06 09:43:05

标签: javascript arrays object ecmascript-6 javascript-objects

我有这个数组burgerActions

[
  {
    statusId: 2,
    label: 'Accept'
  },
  {
    statusId: 3,
    label: 'Reject'
  },
  {
    label: 'Consult'
  },
  {
    label: 'Transfer'
  }
]

和此对象status可以是:

{
  "label": "Accept",
  "id": 2
}

或:

{
  "label": "Reject",
  "id": 3
}

在第一种情况下,您必须从burgerActions数组创建一个新数组,其中statusId不等于我们拥有的status对象的ID(我们只能拥有我列出的2个案例中的一个status对象。 为此,我使用了filter方法:

const result =  burgerActions.filter((element) => {
  return element.statusId !== recommendation.status.id
})

在第二种情况下,我需要一个复杂的条件添加布尔

const statusRef = recommendation.recipient

在第一种情况下,如果statusRef false burgerAction过滤了{label: 'Transfer'}statusRef)中的最后一个对象,我会想要if ()是真的。 我需要一种不使用{{1}}条件来执行此类过滤的方法,因为有几种情况需要处理。

1 个答案:

答案 0 :(得分:1)

如果您要过滤与statusId不同的recommendation.status.id对象,如果recommendation.recipient === true过滤那些没有statusId的对象,您可以在过滤器回调函数中使用此条件:

element.statusId !== recommendation.status.id && recommendation.recipient ? element.statusId != null : true;

其中&& recommendation.recipient ? element.statusId != null : true表示如果recommendation.recipienttrue过滤元素statusId

以下是您的代码应该如何:

var recommendation = {
  status: {
    "label": "Pending",
    "id": 1
  },
  recipient: true
};

const result = burgerActions.filter((element) => {
  return element.statusId !== recommendation.status.id && recommendation.recipient ? element.statusId != null : true;
});

<强>演示:

var burgerActions = [{
    statusId: 2,
    label: 'Accept'
  },
  {
    statusId: 3,
    label: 'Reject'
  },
  {
    label: 'Consult'
  },
  {
    statusId: 1,
    label: 'Transfer'
  }
];

var recommendation = {
  status: {
    "label": "Pending",
    "id": 1
  },
  recipient: true
};

const result = burgerActions.filter((element) => {
  return element.statusId !== recommendation.status.id && recommendation.recipient ? element.statusId != null : true;
});


console.log(result);