如何使用过滤器而不是forEach(Javascript)

如何使用过滤器而不是forEach(Javascript),javascript,arrays,function,object,filter,Javascript,Arrays,Function,Object,Filter,我有下面的功能。我在用forEach。如何在函数中使用filter而不是forEach。我在网上搜索,但找不到实现这一点的方法 pendingPaymentsUtils.getPendingPayment = paymentId => { const payments = pendingPaymentsUtils.getPendingPayments() let payment = {} payments.forEach(function(_payment) { if

我有下面的功能。我在用forEach。如何在函数中使用filter而不是forEach。我在网上搜索,但找不到实现这一点的方法

pendingPaymentsUtils.getPendingPayment = paymentId => {
  const payments = pendingPaymentsUtils.getPendingPayments()
  let payment = {}

  payments.forEach(function(_payment) {
    if (_payment.id === paymentId) {
      payment = _payment
      return false
    }
  })

  return payment
}
我试过下面的方法,但效果不理想

pendingPaymentsUtils.getPendingPayment = paymentId => {
  const payments = pendingPaymentsUtils.getPendingPayments()
  let payment = {}

  payments.filter(function(_payment) {
      payment = _payment
      return _payment.id === paymentId ? false: true
  })

  return payment
}
  • filter
    返回一个结果数组,因此只需返回该数组并去掉
    payment
    变量即可
  • \u payment.id==paymentId?false:true
    可以缩短为just
    return\u payment.id==paymentId
  • 使用箭头函数的隐式返回可以进一步缩短此时间
  • 从外表上看,你需要的似乎不是
  • 大概是这样的:

    pendingPaymentsUtils.getPendingPayment = paymentId => {
      const payments = pendingPaymentsUtils.getPendingPayments();
      return payments.find(payment => payment.id === paymentId);
    }
    
    如果去掉多余的
    付款
    变量,则时间更短:

    pendingPaymentsUtils.getPendingPayment = paymentId =>
      pendingPaymentsUtils.getPendingPayments().find(payment => payment.id === paymentId);
    
    编辑:

    如果未找到对象,则返回空对象,而不是
    未定义的

    pendingPaymentsUtils.getPendingPayment = paymentId =>
      pendingPaymentsUtils.getPendingPayments().find(payment => payment.id === paymentId) || {};
    
  • filter
    返回一个结果数组,因此只需返回该数组并去掉
    payment
    变量即可
  • \u payment.id==paymentId?false:true
    可以缩短为just
    return\u payment.id==paymentId
  • 使用箭头函数的隐式返回可以进一步缩短此时间
  • 从外表上看,你需要的似乎不是
  • 大概是这样的:

    pendingPaymentsUtils.getPendingPayment = paymentId => {
      const payments = pendingPaymentsUtils.getPendingPayments();
      return payments.find(payment => payment.id === paymentId);
    }
    
    如果去掉多余的
    付款
    变量,则时间更短:

    pendingPaymentsUtils.getPendingPayment = paymentId =>
      pendingPaymentsUtils.getPendingPayments().find(payment => payment.id === paymentId);
    
    编辑:

    如果未找到对象,则返回空对象,而不是
    未定义的

    pendingPaymentsUtils.getPendingPayment = paymentId =>
      pendingPaymentsUtils.getPendingPayments().find(payment => payment.id === paymentId) || {};
    


    您在重构它方面做了哪些努力?
    forEach
    方法有效吗?它似乎只返回与条件匹配的最后一项。您想返回所有符合条件的项目还是只返回最后一个项目?我很确定,如果您只是将文本“forEach”替换为“filter”,它将导致相同的付款返回值。forEach和filter对数组中的每个项目运行一次(在您的情况下为付款)。不同之处在于,filter将返回filter/forEach函数中返回true的每个值的子集数组,而forEach不会返回任何内容。@DanielA.White-谢谢。更新了我的重构代码。@ashwinprabhu您是否只希望在数组中找到一项?您在重构它方面做了哪些努力?forEach的
    方法有效吗?它似乎只返回与条件匹配的最后一项。您想返回所有符合条件的项目还是只返回最后一个项目?我很确定,如果您只是将文本“forEach”替换为“filter”,它将导致相同的付款返回值。forEach和filter对数组中的每个项目运行一次(在您的情况下为付款)。不同之处在于,filter将返回filter/forEach函数中返回true的每个值的子集数组,而forEach不会返回任何内容。@DanielA.White-谢谢。更新了我的重构代码。@ashwinprabhu您是否只希望在数组中找到一项?mahir-有一个测试用例,当我使用您的解决方案时,它失败了。预期:{“id”:“payment1”}----已接收:[{“id”:“payment1”}]----因此我将作为数组i接收guess@ashwinprabhu正如我所怀疑的,您需要
    find
    而不是
    filter
    find
    返回与条件匹配的第一个对象,其中
    filter
    返回与条件匹配的所有项的数组。我已经更新了答案,在前面的实现中使用
    find
    而不是
    filter
    。如果没有找到付款,将返回一个空对象。在新的实现中,将返回undefined。如何纠正这种情况?@ashwinprabhu如果找不到对象,则返回
    undefined
    null
    ,这是标准的方法,但是如果您的用例需要一个空对象,那么只需在末尾添加
    |124;{}
    ,如果
    find
    返回
    undefined
    (一个虚假值),则返回空对象
    {}
    将被返回。请检查更新的答案。谢谢@ibrahim mahrirmahir-有一个测试案例,当我使用您的解决方案时,它失败了。预期:{“id”:“payment1”}----已接收:[{“id”:“payment1”}]----因此我将作为数组i接收guess@ashwinprabhu正如我所怀疑的,您需要
    find
    而不是
    filter
    find
    返回与条件匹配的第一个对象,其中
    filter
    返回与条件匹配的所有项的数组。我已经更新了答案,在前面的实现中使用
    find
    而不是
    filter
    。如果没有找到付款,将返回一个空对象。在新的实现中,将返回undefined。如何纠正这种情况?@ashwinprabhu如果找不到对象,则返回
    undefined
    null
    ,这是标准的方法,但是如果您的用例需要一个空对象,那么只需在末尾添加
    |124;{}
    ,如果
    find
    返回
    undefined
    (一个虚假值),则返回空对象
    {}
    将被返回。请检查更新的答案。谢谢@ibrahim mahrir