Ваша проблема в том, что «2D» массив Javascript (то есть массив в Google Apps Script) не имеет значений в первом измерении. Первое измерение - это просто строка данных, с которой вы работаете, в виде массива значений. Все данные находятся в этом внутреннем массиве:
var arr = sheet.getDataRange().getValues();
for (var r = 0, numRows = arr.length; r < numRows; ++r) {
// This will log an Array, e.g. [Car1, timestamp, 1324], in a single line.
Logger.log(arr[r]);
// This loop over the inner array will log Car1, then timestamp, then 1323, each on its own line.
for (var c = 0, numCols = arr[0].length; c < numCols; ++c)
Logger.log(arr[r][c]);
}
Ваше (довольно неясное) предполагаемое использование, кажется, легче всего решить с помощью Object
, а не Array
. Object
может иметь пользовательские свойства, которые сами могут содержать свойства. Например, возможно, вы хотите собрать Object
, который отображает все различные автомобили, которые у вас есть, а затем для каждой машины вы хотите знать, на какие даты они проехали и сколько миль было пройдено за каждую дату. Построение такого Object
будет выглядеть так:
// Create an empty Javascript Object and read data from the sheet.
var carHistory = {}, data = sheet.getDataRange().getValues();
// Remove the header row from the data array.
var headers = data.splice(0, 1)[0];
// Determine the appropriate columns needed.
var carIndex = headers.indexOf("carId");
var dayIndex = headers.indexOf("Date Driven");
var milesIndex = headers.indexOf("Miles");
// Build the object by parsing all rows of data.
for (var r = 0; r < data.length; ++r) {
var row = data[r], id = row[carIndex];
// If this car has not been seen, add it, and initialize its properties.
if (!carHistory[id]) carHistory[id] = {"total miles": 0, days: {}};
// If this day has not been seen, add it.
var drivenOn = row[dayIndex];
/* Assumption: stored a string of the date that does not
parse into a Date object (like a timestamp would) */
if (!carHistory[id].days[drivenOn]) carHistory[id].days[drivenOn] = 0;
// Increment the total and the daily miles.
var miles = row[milesIndex];
carHistory[id]["total miles"] += miles;
carHistory[id].days[drivenOn] += miles;
}
// Log the report:
for (var car in carHistory) {
Logger.log("%s drove %s total miles", car, carHistory[car]["total miles"]);
for (var day in carHistory[car].days)
Logger.log("%s drove %s on day %s", car, carHistory[car].days[day], day);
}
Вы должны прочитать больше об объектах в вашем предпочтительном Javascript Справочнике разработчика. Одной из таких ссылок является MDN .