Создание функции zip() в Javascript

#javascript #arrays #function

Вопрос:

В рамках упражнения я должен создать функцию под названием zip. Он берет два массива одинаковой длины элементов, а затем разделяет их на два массива с элементами одинаковой длины. Я знаю, что есть другие решения, использующие функцию карты, но я пытаюсь выяснить, есть ли для этого другое решение. До сих пор у меня есть это:

 function zip(arr1, arr2) {  let pairArr = [];  for(var i = 0; i lt; arr1.length; i  ) {  if(arr1.length === arr2.length){  let pairs = [arr1[i],arr2[i]];  pairArr.push(pairs);  } return pairArr;  } }  

Это возвращает только один массив с первыми индексами двух массивов. [1, 2, 3, 4] [1, 2, 3, 4] возвращает [1, 1]. Мне нужно, чтобы он вернулся [1, 1] [2, 2] [3, 3] [4, 4].
Спасибо.

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

1. Вы должны вернуться после завершения цикла, а не внутри цикла. Безусловное возвращение внутри цикла означает, что цикл не может повторяться

2. Вы не можете ожидать, что другие будут думать и писать код за вас. Вы должны подумать, попробовать и отладить.

3. Спасибо, Пол, я этого не понимал. Я понимаю это, Хосе, но я написал это несколькими способами, и мне просто нужна была внешняя перспектива. Спасибо вам за ваш вклад

Ответ №1:

Вы помещаете возврат в цикл. Вы должны добавить его вне цикла. Например:

 function zip(arr1, arr2) {  let pairArr = [];  for(var i = 0; i lt; arr1.length; i  ){  if (arr1.length === arr2.length){  let pairs = [arr1[i],arr2[i]];  pairArr.push(pairs);  }   }  return pairArr;  }       console.log(zip([1, 2, 3, 4], [1, 2, 3, 4] )); 

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

1. Спасибо тебе, Арджун.

Ответ №2:

Спасибо всем за ваш вклад. Я не осознавал, что мое возвращение было в курсе событий. Я действительно решил эту проблему. Это то, что у меня есть для функции zip.

 function zip(arr1, arr2) {  let pairArr = [];  for(var i = 0; i lt; arr1.length; i  ){  if (arr1.length === arr2.length){  pairArr[i] = [arr1[i],arr2[i]];    }  }return pairArr;  }  

Ответ №3:

Вот лучшая реализация zip в стиле python в JavaScript, которая может принимать произвольное количество массивов в качестве аргументов и возвращать результат до самого короткого параметра.

 const zip = (...arrays) =gt; {  const length = Math.min(...arrays.map(a =gt; a.length));  return [...Array(length).keys()].map(i =gt; arrays.map(a =gt; a[i])); }