создание новых значений по индексу в цикле JS / массивы

#javascript #arrays #node.js #string #loops

#javascript #массивы #node.js #строка #циклы

Вопрос:

У меня есть массив значений:

 let myArray = [ 'Ifmanwas',
  'meanttos',
  'tayonthe',
  'groundgo',
  'dwouldha',
  'vegivenu',
  'sroots' ]
  

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

Так, например, выводом первого массива будет «Imtgdvs» (все буквы в («0»), вторым будет «fearwer» (все буквы с индексом «1») и т.д…

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

Для этой простой попытки я создал массив всех букв для первого экземпляра:

 function convertToCode(box) {


  let arr = [];
  for (i = 0; i < box.length; i  ) {
    let counter = i;
    let index = box[counter];
    let letter = index.charAt(0);

    arr.push(letter);
  }
  console.log(arr);
}


convertToCode(myArray)
  

Спасибо

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

1. Длина последней строки отличается, как с этим бороться?

2. Пожалуйста, поделитесь одной или несколькими вашими попытками. В противном случае мы просто пишем для вас код с нуля, что не совсем соответствует духу SO.

3. просто возвращает как можно лучше, чтобы конечным выводом было «sseoau», а пустое значение игнорировалось.

4. извините, буду редактировать

5. Вам также нужен внутренний цикл. Подумайте о столбцах и строках. Этот внешний цикл будет проходить только по строкам

Ответ №1:

Основная проблема в вашем примере заключается в следующем: index.charAt(0); . При этом всегда будет получен первый символ, тогда как вам нужен вложенный цикл.

Вы могли бы использовать Array.map() в сочетании с Array.reduce() , например, так:

 let myArray = ['Ifmanwas','meanttos','tayonthe','groundgo','dwouldha','vegivenu','sroots'];

const result = Array.from(myArray[0])                              //Create an array as long as our first string
  .map((l,idx) =>                                                  //Update each item in that array...
    myArray.reduce((out,str) => str[idx] ? out str[idx] : out, "") //to be a combination of all letters at index [idx] from original array
  );

console.log(result);  

Обратите внимание, что при этом используется первая строка в массиве, чтобы решить, сколько строк создать, в отличие от самой длинной строки.