【问题标题】:Complex filter between 2 objects and a boolean2个对象和一个布尔值之间的复杂过滤器
【发布时间】:2018-05-20 03:33:27
【问题描述】:

我有这个数组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(我们只能有一个 status 对象我列出的2个案例)。 为此,我使用了filter 方法:

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

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

const statusRef = recommendation.recipient

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

【问题讨论】:

  • 给出正确的输入输出?
  • 请同时添加想要的结果。
  • 过滤 2 个对象和 另外一个布尔值是什么意思?
  • 我编辑了帖子
  • @MouadEnnaciri 我发布了一个答案,请检查并告诉我这是否是您要找的。​​span>

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


【解决方案1】:

如果要过滤与recommendation.status.id 中不具有相同statusId 的对象,并且如果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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 2020-10-01
    • 2011-04-09
    • 2021-10-30
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多