I am having an issue here with getting my data. So I want to filter out any that has an invoice_status of "Draft"
or "Ready to Bill"
, or "Cancelled"
or if it's invoice_status is null AND status is null
Everything is being filtered out correctly except any data that has both invoice_status is null AND status is null
is not being filtered out. What is the issue with my code below?
console.log(
"data...",
this.props.partnerOrders.filter(
r =>
(r.invoice_status !== "Draft" &&
r.invoice_status !== "Ready to Bill" &&
r.invoice_status !== "Cancelled") ||
(r.invoice_status !== null && r.status !== null)
)
);
Your filter condition in the code is written as the negation (opposite) of your condition-as-words, so as to be true
when the element should be kept. Your statement is correctly negated except: !invoice_status is null AND status is null
is not (r.invoice_status !== null && r.status !== null)
, it is (r.invoice_status !== null || r.status !== null)
.
This is a general rule: !(A && B) == (!A || !B)
, see rules of negation.
Since you want to filter out invoice_status is null AND status is null
, when you invert the logic, by deMorgan's theorem, you get invoice_status is not null OR status is not null
. Changing your final &&
to an ||
should do the trick