Как зациклить несколько массивов - PullRequest
1 голос
/ 13 июня 2019

у меня есть n массивов.Одинаковое количество строк в каждом из них: Array0, Array1, ..., Arrayn.

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

for (var ID = 0; ID < n+1; ID++) {
    for (var i = 0; i < ("Array" + ID).length; i++) {
      ResultArray[i][ID] = ("Array" + ID)[i]
        }
  }

Вот пример того, что я хочу:

Array0 = [Apple, Banana, Chicken]
Array1 = [5, 7, 8]
Array2 = [High, Low, Low]
ResultArray = [[Apple, 5, High], [Banana, 7, Low], [Chicken, 8, Low]]

Ответы [ 3 ]

2 голосов
/ 13 июня 2019
  • У вас есть следующие массивы.

        Array0 = ["Apple", "Banana", "Chicken"];
        Array1 = [5, 7, 8];
        Array2 = ["High", "Low", "Low"];
    
  • Вы хотите преобразовать вышеуказанные массивы в следующий массив.

        [["Apple",5,"High"],["Banana",7,"Low"],["Chicken",8,"Low"]]
    
  • Из вашего примера массива длина каждого массива одинакова.

Если мое понимание верно, как насчет этой модификации? Пожалуйста, подумайте об этом как об одном из нескольких ответов.

Модифицированный скрипт 1:

var Array0 = ["Apple", "Banana", "Chicken"];
var Array1 = [5, 7, 8];
var Array2 = ["High", "Low", "Low"];

var arrays = [Array0, Array1, Array2]; // Please prepare this.

var res = [];
for (var i = 0; i < arrays[0].length; i++) {
  var temp = [];
  for (var j = 0; j < arrays.length; j++) {
    var ar = arrays[j];
    temp.push(ar[i]);
  }
  res.push(temp);
}
Logger.log(res)

Модифицированный скрипт 2:

var Array0 = ["Apple", "Banana", "Chicken"];
var Array1 = [5, 7, 8];
var Array2 = ["High", "Low", "Low"];

var numberOfArrays = 3; // Please prepare this. In your case, it's 3.

var res = [];
for (var i = 0; i < Array0.length; i++) {
  var temp = [];
  for (var j = 0; j < numberOfArrays; j++) {
    var ar = eval("Array" + j);
    temp.push(ar[i]);
  }
  res.push(temp);
}
Logger.log(res)

Примечание:

  • Пожалуйста, выберите один из приведенных выше сценариев для вашей ситуации.

Если я неправильно понял ваш вопрос, и это был не тот результат, которого вы хотите, я прошу прощения.

0 голосов
/ 14 июня 2019

Используйте Array.reduce(), чтобы найти самый длинный массив.Используйте Array.map() для итерации самого длинного массива и получения индекса строки.Затем используйте второй Array.map(), чтобы получить элементы строк из массивов.

const zip = (...arrs) => arrs
  .reduce((r, c) => c.length > r.length ? c : r, []) // get the longest array
  .map((_, i) => arrs.map(a => a[i])) // map the longest array to get the current row number, then create the row

const arr1 = ["Apple", "Banana", "Chicken"], arr2 = [5, 7, 8], arr3 = ["High", "Low", "Low"]

const result = zip(arr1, arr2, arr3)

console.log(result)
0 голосов
/ 13 июня 2019

Вы также можете решить эту проблему более кратко с помощью Array.reduce :

const arr1 = ["Apple", "Banana", "Chicken"], arr2 = [5, 7, 8], arr3 = ["High", "Low", "Low"],
      data = [arr1, arr2, arr3]

let result = data.reduce((acc, c) => 
 (c.forEach((x,k) => acc[k].push(x)), acc), Array.from({length: data.length}, () => []))

console.log(result)

Или в более читабельном виде:

const arr1 = ["Apple", "Banana", "Chicken"], arr2 = [5, 7, 8], arr3 = ["High", "Low", "Low"],
      data = [arr1, arr2, arr3]

let result = data.reduce((acc, c) => {
  c.forEach((x,i) => acc[i].push(x))
  return acc
}, Array.from({length: data.length}, () => []))

console.log(result)

Идея состоит в том, чтобы merge эти массивы и затем Array.reduce, где accumulator уже имеет форму [[],[],[]], поэтому мы просто заполняем каждый из дочерних массивов.

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