减少函数 returns 未定义

Reduce function returns undefined

我搜索了以前回答过的问题,但我认为这是一个独家挑战(请原谅我的英语)。

我下面有这个函数,期望 returns 来自回调 reduce 函数

const { getTrips } = require('api');
const { getDriver } = require('api')
const { getVehicle } = require('api')

/**
 * This function should return the data for drivers in the specified format
 *
 * Question 4
 *
 * @returns {any} Driver report data
 */

let trips = await getTrips().then(data => {
  return data.filter(item => item.billedAmount = parseFloat(item.billedAmount.toString().replace(',', '')), 10)
})
async function driverReport() {
  // Your code goes here
  let getId = trips.reduce((acc, cur)=>{
    acc[cur.driverID] ? acc[cur.driverID] = acc[cur.driverID] + 1 : acc[cur.driverID] = 1
    return acc
  }, {})

  let mapId = Object.keys(getId)
  // console.log(mapId)
  let result = await mapId.reduce(getReport, {})
  console.log(result)//undefined


}

回调函数如下

async function getReport(acc, cur){


  acc = await acc
  // console.log(acc)

  let singleTrip = trips.filter(item => item.driverID == cur)
  // console.log(singleTrip)
  if(singleTrip){

    return getDriver(cur).then( async data => {
      let { name, phone, vehicleID } = data
      acc['fullName'] = name
      acc['id'] = cur
      acc['phone'] = phone
      acc['noOfTrips'] = singleTrip.length
      acc['noOfVehicle'] = vehicleID.length

      return acc

    }).catch(err =>{
      if(err){        
        console.log ('wait')
      }
    })
  }

  return acc
}

回调函数正常,但没有返回值给上面的结果变量。

我已彻底检查并确认我已正确使用 return,但我肯定在某处弄错了。 请帮助找出错误的地方,因为我正试图掌握在 Javascript.

中使用 async 和 await 的窍门

您不应将 filter 用于 trips,因为它会改变项目并根据 item.billedAmount 布尔值进行过滤。因此,如果 item.billedAmount 在任何时候是 0,该项目将从 trips 中删除; 如果要修改项目的值,则必须改用 map。 return 整个 item 在变异而不是更新对象内部的值并将变异作为值返回后

let trips = await getTrips().then(data => {
  return data.map(item => {
    item.billedAmount = parseFloat(item.billedAmount.toString().replace(',', ''));
    return item;
   })
 });

编辑 至于问题,试试这个?

async function getReport(acc, cur){  
  let singleTrip = trips.filter(item => item.driverID == cur)
  if(singleTrip && singleTrip.length) { //filter returns empty array
    try{
     data = await getDriver(cur);
     let { name, phone, vehicleID } = data;
     acc {
       fullName: name,
       id: cur,
       phone,
       noOfTrips: singleTrip.length,
       noOfVehicle: vehicleID.length
     }
    }catch(e) {
      console.log(err);
    }
  }
  return acc
}

我终于想到我必须在 reducer 函数中 return acc 。感谢指导。