#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] было просто тестовым значением, которое я пытался вернуть, чтобы выяснить, что происходит.