我有这个数组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}}条件来执行此类过滤的方法,因为有几种情况需要处理。
答案 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.recipient
为true
过滤元素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);