Почему функция A работает, а функция B выдает ошибку? - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть 2 функции, одна работает, а другая нет - причина, по которой вторая функция важнее, состоит в том, что я хочу изменить то, что находится в конечном массиве.Деконструкция великолепна, и все, но я не ожидаю, что одна и та же посадка входящих данных будет в одном месте - в другом месте я исправил эту проблему, создав отдельные массивы и просто заставив все мои функции возвращать данные по индексу, но я немного ошеломленздесь.

Вот первый (createLogs), который делает то, что я хочу, и если бы данные всегда поступали одинаково, было бы более чем достаточно.

function createLogs(array,runtimeArray) {
  let basicsLog=[]
  array.map(function callback(currentValue,index) {
    let currentRuntime = runtimeArray[index]
    let [,date,time,systemMode,systemSetting,calEvent,ProgramMode,coolSetTemp,heatSetTemp,currentTemp] = currentValue
    basicsLog.push([index,date,time,systemMode,systemSetting,calEvent,ProgramMode,coolSetTemp,heatSetTemp,currentTemp,currentRuntime])
})
console.log(basicsLog)
return basicsLog
}

Возвращает

        [ 36,
          2018-11-19T05:00:00.000Z,
          'second failure',
          'heat',
          'heatOff',
          'hold',
          'Sleep',
          70,
          70,
          69.5,
          135 ],
        [ 37,
          2018-11-19T05:00:00.000Z,
          '2:35:00',
          undefined,
          undefined,
          undefined,
          undefined,
          undefined,
          undefined,
          undefined,
          null ] ]

Теперь вот createResults () - я думаю, что гораздо лучше для ситуации, когда то, что входит, сильно изменчиво (в основном это таблица, а столбцы втаблица различна в разных ситуациях)

createResults () выглядит следующим образом:

function createResults(originalThermostatArray,dateArray,timeArray, systemSettingsArray, systemModeArray, calendarEventArray, programModeArray, coolSetTempArray, heatSetTempArray, currentTempArray, thermostatTempArray, outdoorTempArray, combinedRuntimesArray) {
    let resultArray = []

    originalThermostatArray.forEach(function(currentValue,index) {
      let currentDate = dateArray[index]
      let currentTime = timeArray[index]
      let currentSystemSetting = systemSettingsArray[index]
      let currentSystemMode = systemModeArray[index]
      let currentCalEvent = calendarEventArray[index]
      let currentProgramMode = programModeArray[index]
      let currentCoolSetTemp = coolSetTempArray[index]
      let currentHeatSetTemp = heatSetTempArray[index]
      let currentAvgTemp = currentTempArray[index]
      let currentThermostatTemp = thermostatTempArray[index]
      let currentOutdoorTemp = outdoorTempArray[index]
      let currentRuntime = combinedRuntimesArray[index]
      resultArray.push([index, currentDate, currentTime, currentSystemSetting, currentSystemMode, currentCalEvent,currentProgramMode, currentCoolSetTemp, currentHeatSetTemp, currentAvgTemp, currentThermostatTemp, currentOutdoorTemp, currentRuntime])

    })
    console.log(resultArray)
    return resultArray
}

And Returns

 [ 36,
    2018-11-19T05:00:00.000Z,
    'second failure',
    'heat',
    'heatOff',
    'hold',
    'Sleep',
    70,
    70,
    69.5,
    69.5,
    23.5,
    135 ],
  [ 37,
    2018-11-19T05:00:00.000Z,
    '2:35:00',
    null,
    null,
    null,
    null,
    null,
    null,
    null,
    null,
    23.5,
    null ] ]

На внешнем интерфейсе код выглядит следующим образом

    div.resultSummaries.equipmentSummary
      h1.summaryHeader.equipmentSummaryHead Possible Equipment Failures
      h3.equipmentSummaryBody #{equipresultCount}
      p.equipmentSummaryBody  This table looks for increasing thermostat temperatures during a cooling call.

      table.fullResults.equipmentResultsTable
        caption.equipTitle Possible Equipment Failures Log
          thead
            tr
              th.resultHeader.equipmentHeader   Index
              th.resultHeader.equipmentHeader   Date
              th.resultHeader.equipmentHeader   Time
              th.resultHeader.equipmentHeader   System Setting
              th.resultHeader.equipmentHeader   System Mode
              th.resultHeader.equipmentHeader   Calendar Event
              th.resultHeader.equipmentHeader   Program Mode
              th.resultHeader.equipmentHeader   Cool Set Temp
              th.resultHeader.equipmentHeader   Heat Set Temp
              th.resultHeader.equipmentHeader   Avg Temp
              th.resultHeader.equipmentHeader   Thermostat Temp
              th.resultHeader.equipmentHeader   Outdoor Temp
              th.resultHeader.equipmentHeader   Runtime(sec)
            tr

                tbody
                  - let equipFailsResultLog = result.equipLogs;
                      for item in equipFailsResultLog
                        tr.equipRow
                          for item in equipArray
                            td.resultTable.result.equipResult #{item}
                tfoot

Но createResults () возвращает эту ошибку во внешнем интерфейсе:

/views/upload.pug:137 135| for item in equipFailsResultLog 136| tr.equipRow > 137| for item in equipArray 138| td.resultTable.result.equipResult #{item} 139| tfoot 140| Cannot read property 'length' of undefined.

Я думаю, что тот факт, что они возвращаются по-разному, вызывает ошибку, но почему?обратите внимание, что я пытался написать createResults () как a для каждого, а карта

function1 (createlogs) позволяет мне войти в массив и получить доступ к отдельным элементам и правильно разместить их

function2 (createResults) не ..

Как я могу получить доступ к вложенным элементам с помощью функции 2 или отобразить их так, как я хотел бы?

добавлено:

создание результатов называется какэтот

const basicLogsArray = returnLogic.createResult(originalThermostatArray,dateArray,timeArray,systemSettingsArray,systemModeArray,calendarEventArray,programModeArray,coolSetTempArray,heatSetTempArray,currentTempArray,thermostatTempArray,outdoorTempArray,combinedRuntimesArray) 

создать журнал вызывается аналогично, но только с массивом и массивом времени выполнения.

const equipFailsLogs = reportLogic.rowsByIndex(
    basicLogsArray,
    possibleEquipmentFailuresArray
  )

  console.log(equipFailsLogs)

Это то, что идет в интерфейс.(Я запускаю другую функцию, чтобы получить всю строку, с которой связан каждый бит даты, и вернуть ее в виде таблицы html в pug.

  return {
    "Results": {
    "coolCount":coolFailsRows.length/2 , coolLogs:coolFailsLogs,
    "heatCount":heatFailsRows.length/2 , heatLogs:heatFailsLogs,
    "miscCount":miscFailsRows.length/2 , miscLogs:miscfailsLogs,
    "equipCount":equipFailsLogs.length/4 , equipLogs:equipFailsLogs,
  }};
}

exports.runThermostat = runThermostat
...