亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Reduce 函數返回未定義

Reduce 函數返回未定義

江戶川亂折騰 2021-11-18 16:02:24
我已經搜索了以前回答過的問題,但我認為這是一個獨家挑戰(請原諒我的英語)。我在下面有這個函數,期望從回調減少函數返回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 的竅門。
查看完整描述

2 回答

?
楊魅力

TA貢獻1811條經驗 獲得超6個贊

您不應該使用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

}


查看完整回答
反對 回復 2021-11-18
?
GCT1015

TA貢獻1827條經驗 獲得超4個贊

我終于想到我必須返回acc到 reducer 函數中。感謝您的指導。


查看完整回答
反對 回復 2021-11-18
  • 2 回答
  • 0 關注
  • 195 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號