Вложенный массив, не возвращающий ожидаемое значение

#javascript #arrays #dictionary

#javascript #массивы #словарь

Вопрос:

Я пытаюсь получить доступ к отдельным значениям в массиве внутри массива, у меня есть общий массив, в котором есть массивы, а затем внутри него я хочу иметь доступ к этим значениям.

Я бы также, вероятно, присвоил каждое из этих значений переменным.

По сути, я пытаюсь выполнить итерацию по тому, что станет сеткой значений (массив внутри массива), используя JS.

1) Я попытался получить доступ к значению, поместив значения строк в массив в виде строки JSON, а затем сопоставив его как array.map => row.map, а затем сопоставив его с отдельными элементами

2) Я попытался «деструктурировать» объект, но, похоже, это тоже никуда не привело.

 
async function dataFormat(worksheet, rowNumber) {
  csvWorkbook = workbook.csv.readFile("./uploads/uploadedFile.csv");
  await csvWorkbook.then(async function(result) {
    let restarts = 0;
    let nullCounts = true;
    let thermostatRows = []; 

// you have to define THEN destructure the array
    // const [serial,date,startDate,endDate,thing3,thing4,thing5] = firstTemps

    worksheet.eachRow({ includeEmpty: true }, function(row, rowNumber) {
      if (rowNumber > 6) {
        Rows.push(`${JSON.stringify(row.values)}`);

      }
    });
    console.log(thermostatRows[0])
  })
  };
  

Вот моя функция, которая возвращает первую строку. Если я помещаю строки [0] [0], я получаю письмо.

вот возврат строк[1]

[null,"2018-12 03T05:00:00.000Z","16:35:00","heat","heatOff", "hold","Home",70.1,70.1,69.8,43,33.8,0,0,15,15,null,69.8,43,1]

Что имеет смысл, поскольку это первая строка.

но запись строк [0] [0] дает мне первую букву null (первое значение в массиве)

Наконец ,

 [ '[null,"2018-12-02T05:00:00.000Z","23:25:00","heat","heatOff","auto","Home",72,72,72,47,41.3,0,0,0,0,null,72,47,0]',

  '[null,"2018-12-03T05:00:00.000Z","16:35:00","heat","heatOff","hold","Home",70.1,70.1,69.8,43,33.8,0,0,15,15,null,69.8,43,1]',

'[null,"2018-12 03T05:00:00.000Z","16:40:00",null,null,null,null,null,null,null,null,33.8,0]'

  

Это приблизительный журнал, если я регистрирую строки без чего-либо еще — чтобы дать вам представление обо всей ситуации.

редактировать: моя функция теперь выглядит так, почему она возвращает undefined?

     if (rowNumber > 6) {
      thermostatRows.push((row.values));
    }
  });
  thermostatRows.map(thermostatRow => {
    // let [date,time,SystemSetting,systemMode,calendarEvent,ProgramMode,coolSetTemp,HeatSetTemp,currentTemp,currentHumidity,outdoorTemp,windSpeed,coolStage1,HeatStage1,Fan,DMOffset,thermostatTemperature,thermostatHumidity,thermostatMotion] = thermostatSettings
    console.log(date,time,SystemSetting)
    })
  })
};```

FINAL UPDATE 

It works I figured out the undefined deal myself- try this. (this is with the excel.js library)

  async function dataFormat(worksheet, rowNumber) {
    csvWorkbook = workbook.csv.readFile("./uploads/uploadedFile.csv");
    await csvWorkbook.then(async function(result) {
      let restarts = 0;
      let nullCounts = true;
      let thermostatRows = [];
      let thermostatSettings = []; // you have to define THEN destructure the array
      // const [serial,date,startDate,endDate,thing3,thing4,thing5] = firstTemps

      worksheet.eachRow({ includeEmpty: true }, function(row, rowNumber) {
        if (rowNumber > 6) {
          thermostatRows.push((row.values));
        }
      });
      thermostatRows.map(thermostatRow => { [,date,time,SystemSetting,systemMode,calendarEvent,ProgramMode,coolSetTemp,HeatSetTemp,currentTemp,currentHumidity,outdoorTemp,windSpeed,coolStage1,HeatStage1,Fan,DMOffset,thermostatTemperature,thermostatHumidity,thermostatMotion] = thermostatRow
        console.log(date,time,SystemSetting)
        })
      })
    }; 
  

Комментарии:

1. Что делает eachRow?

2. // Выполнить итерацию по всем строкам, которые имеют значения на листе.. но мне нужно сделать это, чтобы поместить эти значения в массив, который я могу сопоставить и т.д. (Я работаю с CSV)

Ответ №1:

Во-первых, вы должны знать, что массивы Javascript индексируются с нулевым индексом. Это означает, что для получения ПЕРВОГО элемента вы используете индекс 0. Когда вы вызываете Rows[1], вы фактически получаете второй элемент.

Во-вторых, вы не создаете 2d-массив, вы создаете одномерный массив строк.

Rows.push(`${JSON.stringify(row.values)}`);

Это берет row.values и превращает его в строку, интерполирует его в другую строку, затем помещает конечный результат в массив.

Если вам нужен массив внутри первого массива, который, как я предполагаю, содержит row.values, сделайте Rows.push(row.values);

Комментарии:

1. Боже мой, ошибка новичка в моем описании!! [1] было просто тестовым значением, которое я пытался вернуть, чтобы выяснить, что происходит.