【问题标题】:Issue with using .filter(), confused with the AND/OR (&&/||), could someone help me out?使用 .filter() 的问题,与 AND/OR (&&/||) 混淆,有人可以帮我吗?
【发布时间】:2022-01-11 15:09:19
【问题描述】:

我在获取数据时遇到问题。所以我想过滤掉任何具有"Draft""Ready to Bill""Cancelled"invoice_status is null AND status is null 的invoice_status

所有内容都被正确过滤掉了,除了没有被过滤掉invoice_status is null AND status is null 的任何数据。我下面的代码有什么问题?

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)
  )
);

【问题讨论】:

  • || 表示如果第一部分中的invoice_status 检查为真,则根本不会执行第二部分中对nulls 的检查。如果您想保留以下条目 1) 有 invoice_status not 等于 DraftReady to billCancelled,并且 2) 有 invoice_status 不是 null 和 @ 987654337@ 不是null,您需要使用&& 而不是||。你实际上只需要一系列!== 条件,并由&& 加入。
  • 我也试过了,但还是不行。它会过滤掉所有内容
  • 请使用包含您要保留和要删除的条目的数组更新问题,并向我们展示结果数组的外观。听起来status 检查可能需要以某种方式分组。 (是否有要保留的 status = null 条目?)

标签: javascript reactjs


【解决方案1】:

您在代码中的过滤条件被写成您的条件即词的否定(相反),以便在应该保留元素时为true。您的陈述被正确否定,除了:!invoice_status is null AND status is null 不是(r.invoice_status !== null && r.status !== null),它是(r.invoice_status !== null || r.status !== null)

这是一般规则:!(A && B) == (!A || !B),参见rules of negation

【讨论】:

    【解决方案2】:

    由于您想过滤 out invoice_status is null AND status is null,当您反转逻辑时,根据德摩根定理,您会得到 invoice_status is not null OR status is not null。将您的最终 && 更改为 || 应该可以解决问题

    【讨论】:

    • 实际上我也必须更改其他内容。最后一个 && 改为 ||最后一个 ||将其更改为 && 所以它最终看起来像这样... && r.invoice_status !== "Cancelled" && (r.invoice_status !== null || r.status !== null)`
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-05
    • 2023-03-19
    • 1970-01-01
    相关资源
    最近更新 更多