猿问

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 的窍门。


江户川乱折腾
浏览 170回答 2
2回答

杨魅力

您不应该使用filterfor,trips因为它正在改变项目并根据item.billedAmount布尔值进行过滤。因此,如果item.billedAmount是0在任何时候,该项目将从中删除trips;map如果要修改项目的值,则必须改用。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}

GCT1015

我终于想到我必须返回acc到 reducer 函数中。感谢您的指导。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答