Итерация по нескольким массивам в Javascript без использования индексов - PullRequest
0 голосов
/ 06 октября 2018

Я пытаюсь зациклить несколько массивов, используя один цикл for или для каждого.

У меня есть три массива, а именно: name , id и доступны .Размеры этих массивов равны.

Что мне нужно сделать, так это то, что мне нужно перебрать каждое значение из вышеуказанных массивов и, основываясь на индексе строки и столбца (значения i и j соответственно), скопировать значение элементав ячейку электронной таблицы.

Ниже приведен код, который я использую:

for (i = 1; i <= copy_range.getNumRows(); i++) {
  for (j = 1; j <= copy_range.getNumColumns(); j++) {
    if (j == 1) {
      var name_cell = copy_range.getCell(i, j);
      // I want to do this however I'm not able to do this since I already have i and j for
      // row and column iteration and that another nested loop makes things complicated
      name_cell.setValue(name[k]);
    }
    else if (j == 2) {
      var id_cell = copy_range.getCell(i, j);
      Logger.log(id_cell.getA1Notation());
      id_cell.setValue(id[k]); //Same idea as in previous if
    }
    else {
      var availability_cell = copy_range.getCell(i, j);
      Logger.log(availability_cell.getA1Notation());
      availability_cell.setValue(available[k]); //Same as if and else if loops previously.
    }
  }   

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

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

1 Ответ

0 голосов
/ 06 октября 2018

Мне кажется, что у вас есть три массива "столбцов" из N записей и вы хотите записать их в диапазон, состоящий из N строк и 3 столбцов (с именем copy_range).Лучший способ сделать это - объединить эти 3 массива в необходимый 2D-массив, который можно записать непосредственно в одном вызове:

const output = name.map(function (nameVal, row) {
  return [nameVal, id[row], availability[row]];
});
copy_range.setValues(output);

В приведенном выше примере используется метод Array#map для итерации nameмассив и назначает индекс, связанный с каждым элементом nameVal, равным row.Доступ к соответствующему элементу в массивах id и availability осуществляется с помощью row.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...