#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])); }