减少对对象数组进行的映射和过滤器组合的使用

问题描述 投票:0回答:1

具有对象数组作为输入,我必须找到并减去具有相同transactionAmount(与循环中的当前项目)且transactionReference等于13的项目的transactionType字段的数量。最终结果,我必须排除transactionType为13的项目,并对其余项目进行一些自定义操作。

给出下面的数组:

[
    {
        transactionId: 45194,
        transactionDate: 1579858773136,
        transactionType: 13,
        transactionReference: 82941,
        transactionAmount: 1.21
    },
    {
        transactionId: 45193,
        transactionDate: 1579858773120,
        transactionType: 11,
        transactionReference: 82941,
        transactionAmount: 10
    },
    {
        transactionId: 45192,
        transactionDate: 1579858763947,
        transactionType: 1,
        transactionAmount: 10
    },
    {
        transactionId: 45191,
        transactionDate: 1579858759085,
        transactionType: 131,
        transactionAmount: 2000
    }
]

我想出了以下功能:

transactions => transactions
    .map(({
      transactionId,
      transactionDate,
      transactionType,
      transactionReference,
      transactionAmount
    }) => ({
      transactionId,
      transactionDate,
      transactionType,
      transactionReference,
      transactionAmount: transactionAmount - Number(transactions
        .filter(({
          transactionId: _transactionId,
          transactionReference: _transactionReference,
          transactionType
        }) => transactionType === 13 &&
        _transactionId !== transactionId &&
        transactionReference&&
        _transactionReference === transactionReference
        )
        .map(({ transactionAmount }) => transactionAmount))
    }))
    .filter(({ transactionType }) => transactionType !== 13)
    .map(({
      transactionId,
      transactionAmount,
      transactionDate,
      transactionType
    }) => ({
      id: transactionId,
      amount: Number(transactionAmount).toFixed(2),
      date: moment(transactionDate).format('H:mm'),
      type: transactionType
    }))

[我现在想做的是减少map / filter函数的使用数量(同时保持结果),因为我怀疑这样做的方式并不是最有效的。

结果:

[
    {
        id: 45193,
        amount: "8.79",
        date: 1579858773120,
        type: 11
    },
    {

        id: 45192,
        amount: "10.00",
        date: 1579858763947,
        type: 1

    },
    {
        id: 45191,
        amount: "2000.00",
        date: 1579858759085,
        type: 131
    }
]
javascript arrays
1个回答
0
投票
假设您的数组按类型为13的事务排在首位(*)

    仅建立地图参考->首先金额
© www.soinside.com 2019 - 2024. All rights reserved.