Javascript 循环遍历对象数组,根据日期是否在当前月份进行过滤

Javascript 循环遍历对象数组,根据日期是否在当前月份进行过滤,javascript,reactjs,Javascript,Reactjs,我有以下猫鼬模式: const SubmitDebtSchema = new Schema ({ creditCard: String, balance: [{ balanceDate: Date, newBalance: Number }], }); 然后我有一个React前端,它启动一个空数组,并将响应设置为state: this.state = { debts: [] } 然后我想过滤这个数组,如果creditCard===true,则将

我有以下猫鼬模式:

const SubmitDebtSchema = new Schema ({
  creditCard: String,
  balance: [{
    balanceDate: Date,
    newBalance: Number
  }],
});
然后我有一个React前端,它启动一个空数组,并将响应设置为state:

this.state = {
      debts: []
    }
然后我想过滤这个数组,如果creditCard===true,则将它们保存在一个变量中:

  const creditCards = this.state.debts.filter((x) => { return x.creditCard === 'true' })
const databaseBalance = creditCards.map(x => x.balance)
const currentMonthValues = []
const currentMonthValuesMinusOne = []
const currentMonthValuesMinusTwo = []
接下来,我映射数组中剩余的每个对象,取出它们的“balance”对象,并将它们保存在另一个变量中:

  const creditCards = this.state.debts.filter((x) => { return x.creditCard === 'true' })
const databaseBalance = creditCards.map(x => x.balance)
const currentMonthValues = []
const currentMonthValuesMinusOne = []
const currentMonthValuesMinusTwo = []
如果我使用控制台日志databaseBalance,则输出如下:

[{{u id:“5fc4aa02959b1409f2edab69”,新余额:300,余额日期: “2020-11-30T08:14:58.035Z”{u id:“5fc51cb0bd4d9a0f6059bdbe”, 新天平:400,平衡日期:“2020-11-30T16:24:14.390Z”}]

然后我想做的是查看每个balanceDate条目,将它们与某个月(当前月、当前月-1、当前月-2等)进行比较,然后将它们存储在以下变量中:

  const creditCards = this.state.debts.filter((x) => { return x.creditCard === 'true' })
const databaseBalance = creditCards.map(x => x.balance)
const currentMonthValues = []
const currentMonthValuesMinusOne = []
const currentMonthValuesMinusTwo = []
作为参考,balanceDate条目存储为日期对象,如下所示:

2020-11-30T08:14:58.035Z

存储在空currentMonthValue中的条目必须是完整对象,并且仍然包含“newBalance”数据等等

我的问题是。。。我该怎么做?我一直在绞尽脑汁想怎么做,但一辈子都想不出来

希望以上所有内容都清楚,如果您有问题,请说出来

编辑:我现在有一个修复。。。我现在只需要把数字减少到总数

以下是工作功能:

const currentMonthCreditArray = creditCards.flatMap(x => x.balance.filter(y => (new Date(y.balanceDate).getMonth() === new Date().getMonth())))
我现在需要做的是从这个数组中获取每个“newBalance”,并将它们减少到一个总体数字中

我试过这样的东西

const currentMonthFinal = currentMonthCreditArray.flatMap(x => x.balance.map(y => y.newBalance.reduce((a,b) => a + b, 0)))

但它出错了。有任何指针吗?

您可以在地图内部进行过滤,如下所示:

const currentmount=creditCards.map((x)=>{
返回{…x,balance:x.balance.filter((y)=>new Date().getMonth()-new Date(y.balanceDate.getMonth()i.balance.length);
const lessOneMonth=creditCards.map((x)=>{
返回{…x,balance:x.balance.filter((y)=>new Date().getMonth()-new Date(y.balanceDate.getMonth()i.balance.length);
日期过滤器可能并不完全是你想要的,但你应该明白这一点



我喜欢函数式编程,但上面的这个会做很多循环。如果这些数组很大,这可能不是一个很好的解决方案。在这种情况下,请查看Array.reduce()或好的旧数组.push()

谢谢,我觉得这很接近……但我认为它没有达到预期效果-它没有过滤掉任何一个部分。你能解释一下每个部分的作用吗,以及“是”和“日期过滤器”可能不是你想要的。date.getMonth()以整数形式返回日期。因此,我们正在查看您的日期与当前日期之间的差异有多少个月。如果差异小于1个月,则小于2个月,等等。@Jonnochson回答已更新,可能更适合您的需要。此外,我的日期参数的顺序错误。现在应该进行筛选。谢谢您。原始答案更接近-正确只是需要一个'-1'、'-2'等,而不是'@Jonnocholson yeah肯定会尝试帮助。我认为在这一点上,你应该能够使用:
CurrentMonthCreditaray.reduce((a,b)=>a.newBalance+b.newBalance,0)
在flatMap之后,数组应该只有1层深-所以不要尝试chain.flatMap().map().reduce()-这将需要3个级别的阵列