0

我有以下扭曲的情况,需要一些指导。这是代码

下面这个函数是用来检测信用卡是否过期的。true如果卡已过期且false卡有效,此函数返回布尔值

const isCardExpired = (mm, yy) => {
  const month = parseInt(mm, 10);
  const year = parseInt(yy, 10);
  const date = new Date();
  const currentYear = parseInt(
    date
      .getFullYear()
      .toString()
      .substr(-2),
    10
  );
  const currentMonth = date.getMonth() + 1;
  console.log(month, year, date, currentYear, currentMonth);
  if (year < currentYear) {
    return true;
  }

  if (month > 12 || (year === currentYear && month < currentMonth)) {
    return true;
  }
  return false;
};

这是我PaymentMethods的长度数组3。它可能会有所不同,这就是为什么我必须循环播放它。

(3) [PaymentMethod, PaymentMethod, PaymentMethod]
0: PaymentMethod
data:
    cardLast4Digits: "1111"
    cardType: "CREDIT"
    expiryMonth: "2"
    expiryYear: "19"

1: PaymentMethod
data:
    cardLast4Digits: "6144"
    cardType: "DEBIT"
    expiryMonth: "12"
    expiryYear: "24
2: PaymentMethod
data:
    cardLast4Digits: "6949"
    cardType: "VISA"
    expiryMonth: "12"
    expiryYear: "25"
length: 3

这是我需要做的,我需要遍历所有 3 种付款方式,并且只拿起cardType: "CREDIT并检查卡是否已使用上述isCardExpired功能过期。yymm这个功能基本上expiryMonthexpiryYearPaymentMethods

一旦找到cardType: CREDIT,它将检查卡是否过期,如果过期,它将从paymentMethods数组中删除该支付方式并将其分配给不同的数组。

例如,如果有 2 张过期的信用卡,则应将其从PaymentMethods数组中删除并将其推送到另一个数组,该数组将列出这 2 张过期的信用卡。

有人可以解释一下这个困难吗?

4

3 回答 3

1

试试这个:

const expiredCards = paymentMethods.filter(c => c.data.cardType === "CREDIT" && isCardExpired(c.data.expiryMonth, c.data.expiryYear));
paymentMethods= paymentMethods.filter(c => c.data.cardType !== "CREDIT" || !isCardExpired(c.data.expiryMonth, c.data.expiryYear));
于 2019-11-27T18:25:48.830 回答
1

我不知道我是否正确理解了您想要实现的目标,但这是我的示例

const getExpiredCards = (paymentMethods)=>paymentMethods.filter(({expiryMonth,expiryYear,cardType})=>cardType === 'CREDIT' && isCardExpired(expiryMonth,expiryYear))
于 2019-11-27T18:27:09.070 回答
1

使用 ES6、spad 运算符和 reduce:

function partitionExpiredCards(cardArray) {
 return cardArray.reduce(
  ([pass, fail], elem) => {
   return isCardExpired(elem) ? [[...pass, elem], fail] : [pass, [...fail, elem]];
  },
  [[], []]
 );
}

const [ExpiredPaymentMethods, ValidPaymentMethods] = partition(PaymentMethods);

也可以写成:

const [ExpiredPaymentMethods, ValidPaymentMethods] = PaymentMethods.reduce(([p, f], v) => (isCardExpired(v) ? [[...p, v], f] : [p, [...v, e]]), [[], []]);


对于任一示例,如果PaymentMethods不应发生变化,请将PaymentMethods替换为:

[...PaymentMethods]
于 2019-11-27T19:02:32.200 回答