Javascript 减少对对象数组中的贴图和过滤器组合的使用
将对象数组作为输入,我必须找到并减去与循环中当前项具有相同transactionReference且transactionType等于13的项的TransactionMount字段的数量。在最终结果中,我必须排除transactionType为13的项,并对其余项执行一些自定义操作 给定以下数组:Javascript 减少对对象数组中的贴图和过滤器组合的使用,javascript,arrays,Javascript,Arrays,将对象数组作为输入,我必须找到并减去与循环中当前项具有相同transactionReference且transactionType等于13的项的TransactionMount字段的数量。在最终结果中,我必须排除transactionType为13的项,并对其余项执行一些自定义操作 给定以下数组: [ { transactionId: 45194, transactionDate: 1579858773136, transactionTyp
[
{
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
}
]
假设数组是按先有类型13的事务排序的* 只需先建立一个map ref->amount 从输出中放弃类型13的事务 对于其他交易,请从映射中查找要减去的金额或减去0 const transactions=[{transactionId:45194,transactionDate:1579858773136,transactionType:13,transactionReference:82941,TransactionMount:1.21},{transactionId:45193,transactionDate:157985873120,transactionType:11,transactionReference:82941,TransactionMount:10},{transactionId:45192,transactionDate:1579858763947,transactionType:1,TransactionMount:10},{transactionId:45191,transactionDate:1579858759089085,transactionType:131,TransactionMount:2000}] const out=transactions.mapt=>{ //临时性的,只是通过减少变量的冗长来保护你的眼睛 const ref=t.transactionReference 返回Object.assign{ 根:t, 日期:t.transactionDate, 类型:t.transactionType, id:t.transactionId, 金额:t.transactionAmount },ref?{ref}:{} } .reduceout,t=>{ //构建参考文献地图 如果t.type==13{ out.refAmount[t.ref]=t.amount 返回 } const amount=t.amount-out.refAmount[t.ref]| 0 推{ id:t.id, 金额:金额,, 日期:new Datet.date.getTime, 类型:t型 } 返回 },{refAmount:{},without13:[]}。without13
console.logout您能给出一个输出示例吗?我不确定我是否理解生成输出所采取的步骤?为什么您要从第二个金额中减去第一个金额?为什么不反过来?您选择哪一个日期?等等。如果您能澄清这些问题,我将尝试回答您:因此交易类型13类似于因子I n如果它们共享相同的transactionReference值,则需要从任何其他transactionType中减去。这一部分永远不会改变。日期不相关,只是一直向下到结果。我不明白为什么第一个从第二个减去,为什么不是相反?顺序从何而来?只是一个ins我需要遵循的说明。现在我不明白如何用任何其他方式解释它。谢谢你代表我提问。我认为你最初的描述非常清楚,但可能其他人觉得不够清楚,希望你在提出一些答案之前更加详细。。。