【问题标题】:Resolving Elements in Array when Array Length is 0 (MongoDB, React, Axios)当数组长度为 0 时解析数组中的元素(MongoDB、React、Axios)
【发布时间】:2019-12-12 20:56:58
【问题描述】:

我正在编写一个应用程序,它通过 axios 向我编写的服务器发出 GET 请求。这是我编写的可能与该问题相关的服务器代码。

app.get("/getScheduledTimes/:day/:stationId", (req, res) => {
  const {stationId, day} = req.params;
  db.collection(`${day}-schedules`).find({
    stationInfo: {$exists: true}
  }).toArray((error, result) =>{
    if(error) {
      console.log('Schedule Database Error: ', error)
    }
    let scheduledTimes;
    for(let i = 0; i < result.length; i++){
      if(result[i].stationInfo[stationId]){
        scheduledTimes = result[i].stationInfo[stationId]
        break;
      }
    }
    scheduledTimes = sortTimeArray(scheduledTimes);
    res.json({
      scheduledTimes: scheduledTimes,
      success: true,
    })
  })
})

sortTimeArray 所做的基本上是按日期对对象数组进行排序。当我查看它发送的内容时, res.data.scheduledTimes 将是一个对象数组,这是我所期望的。

当我从前端发出请求时,originTimeTable 进行其中一个调用会返回一个长度为 0 的数组,其中包含元素。但是,departTimeTable 按我的预期返回数组。

这是客户端代码:

getTimes = async () => {
    // Make API calls to get the timetables for the selected stations
    const {originStationId, destinationStationId} = this.state;
    const responseOrigin = await axios(`http://localhost:3002/getScheduledTimes/weekday/${originStationId}`)
    const originTimeTable = responseOrigin.data.scheduledTimes;
    const responseDestination = await axios(`http://localhost:3002/getScheduledTimes/weekday/${destinationStationId}`)
    const departTimeTable = responseDestination.data.scheduledTimes;
    await this.setState({
      originTimes: originTimeTable,
      destinationTimes: departTimeTable,
    })
  }

我 console.log originTimetable 时的结果是:

originTimetable:  
(28) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
length: 0
__proto__: Array(0)

我已阅读this 的答案,并且我了解originTimetable 数组尚未解决。我想知道如何让元素数组像我预期的那样解析为对象数组。

目标是我将使用originTimeTabledepartTimeTable 然后将它们转换为一个数组。任何有关如何解决此问题的指导都会很棒!

【问题讨论】:

    标签: arrays reactjs mongodb express axios


    【解决方案1】:

    好的,经过反复试验,我设法弄明白了。这涉及使用JSON.parseJSON.stringify。似乎关键是使用JSON.stringify 来解决每个承诺,然后使用JSON.parse 来获取值。

    const originTimeTable = responseOrigin.data.scheduledTimes.map(
       time => JSON.stringify(time)
    );
    const departTimeTable = responseDestination.data.scheduledTimes.map(
       time => JSON.stringify(time)
    );
    this.setState({
       originTimes: originTimeTable,
       destinationTimes: departTimeTable,
    })
    

    这样,当我真正需要它时,我可以像这样使用JSON.parse

    let {originTimes, destinationTimes} = this.state;
    originTimes = originTimes.map(time => JSON.parse(time))
    destinationTimes = destinationTimes.map(time => JSON.parse(time))
    

    希望这对遇到此问题的人有所帮助!

    【讨论】:

      猜你喜欢
      • 2018-12-02
      • 2023-03-06
      • 2018-04-07
      • 2017-11-10
      • 2014-07-27
      • 2015-11-14
      • 2019-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多