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