Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 减少从数组中提取对象时返回NaN的函数-MongoDB数据库,反应前端_Javascript_Reactjs_Mongodb - Fatal编程技术网

Javascript 减少从数组中提取对象时返回NaN的函数-MongoDB数据库,反应前端

Javascript 减少从数组中提取对象时返回NaN的函数-MongoDB数据库,反应前端,javascript,reactjs,mongodb,Javascript,Reactjs,Mongodb,我有以下模式: const SubmitDebtSchema = new Schema ({ balance: [{ balanceDate: Date, newBalance: Number }], }); 我试图循环遍历我的数据库条目,从balance数组中的每个对象中提取“newBalance”,然后将它们减少/相加 然而,它正在返回“南”-我不明白为什么 以下是我的Axios调用以获取数据: componentDidMount() { axios.

我有以下模式:

const SubmitDebtSchema = new Schema ({
  balance: [{
    balanceDate: Date,
    newBalance: Number
  }],
});
我试图循环遍历我的数据库条目,从balance数组中的每个对象中提取“newBalance”,然后将它们减少/相加

然而,它正在返回“南”-我不明白为什么

以下是我的Axios调用以获取数据:

  componentDidMount() {

    axios.get("/api/fetch/fetchDebtCards")
    .then((response) => {
      this.setState({
        debts: response.data
      })
      console.log(this.state.debts.balance.newBalance)
    })
  }
那里的控制台日志成功检索数据库条目

这是我的reduce函数:

const sumBalance = this.state.debts.reduce(function(previousValue, currentValue) {
          return (
            previousValue + currentValue.balance.newBalance
          )
        }, 0)
您可以看到,我正在尝试点击“balance.newBalance”以访问每个balance对象中的newBalance

有人能指出我做错了什么吗

编辑:我的控制台日志,包含两个条目。我要做的是从这些数组中得到newBalance array.length-1,并通过减少它们的值将它们相加

[Log]数组

0对象

余额:[{u id:“5fbbddd1077c56000828973c”,余额日期: “2020-11-23T16:05:36.124Z”,新天平:400}]

1对象

余额:[{u id:“5FBC06F58B2F9800865DF54”,余额日期: “2020-11-23T19:01:07.789Z”,新天平:300}](1)

如果“console.log(this.state.deborts.balance.newBalance)”有效,那么债务不是数组,那么您如何使用债务映射?Map只能用于数组

我不确定你的对象/数组到底是什么。也许记录下来会有帮助

如果它是一个数组,那么这可能会起作用

const sumBalance = this.state.debts.map(x => x.balance).flat().reduce((a,b) => a + b.newBalance, 0)
如果它是一个对象,那么这可能会起作用

const sumBalance = this.state.debts.balance.reduce((a,b) => a+b.newBalance, 0)
如果这些都不起作用,只需记录“this.state.deborts”,让我们看看你有什么

编辑:好的,那么您只需要余额数组的最后一个值(最新余额),类似这样的吗

const sumBalance = this.state.debts.map(x => x.balance[x.balance.length-1].newBalance).reduce((a,b) => a + b, 0)

如果
currentValue.balance.newBalance
中有任何NaN,则您将得到NaN作为减少的结果。也许可以尝试在retrun语句中返回一个常量“1”,将其作为潜在的原因,在每个条目中都必须有。这是因为它没有提取条目。
this.state.debtes
应该是一个数组,这样您就可以使用reduce了。但是在你的console.log之后,它不是arrayHey,我将用我的console日志更新我的原始帖子。。。第一个不起作用-关键的一点是,我没有试图减少“newBalance”数组,但是所有的平衡,特别是其中的newBalance,如果这有意义的话?我现在已经添加了它。根据你的结构,第一个答案应该起作用,它会给你什么输出?好的,我想我已经解决了。。。这是我的错。所以“平衡”是一个对象数组。您的第一个函数返回3000-这是progress,但我实际想要的是从balance数组中提取最后一个数字,并对我的所有数据库条目执行该操作;然后把它们加起来。我从每个日志中取出值数组;因为他们每个人都有7/8。所以我想它会像x.balance[balance.length-1]一样,在编辑之后工作。非常感谢你的帮助!