Перебор массива с шагом 2

Есть массив из элементов которого нужно создать двумерный массив с шагом 2.

input

let elems = [ '1', '2', '3', '4']

output

let newarr = [
  [1,3],
  [2,4]
]

Сам додумался до чего-то такого, но получается массив с 4 элементами, а не с двумя

let newarr = []

let elems = [ '1', '2', '3', '4']

for (var i=0; i <= 3; i=i+1) {
  newarr.push(Array.from(elems[i]))
}

for (var i=1; i <= 3; i=i+2) {
  newarr.push(Array.from(elems[i]))
}

Ответы (2 шт):

Автор решения: highpassion

Можно сформировать массив так:

Вы проходитесь по оригинальному массиву с помощью forEach(), нечетные индексы идут в первый массив, четные - во второй (условие с оператором остатка я задал тернарным оператором для удобочитаемости). После этого добавляем оба новых массива в конечный массив.

let newarr = [],
elems = ['1', '2', '3', '4'],
f = [],
s = [];

elems.forEach((n, i) => ((i % 2) ? s : f).push(n)); 

newarr.push(f, s);
→ Ссылка
Автор решения: Qwertiy

Вот 3 способа - выбирай:

let elems = [1, 2, 3, 4]

let a = [], b = []

for (let i=0; i<elems.length; ++i) {
  (i & 1 ? b : a).push(elems[i])
}

console.log(a)
console.log(b)

let elems = [1, 2, 3, 4]

let a = [], b = []
elems.forEach((x, i) => (i & 1 ? b : a).push(x))

console.log(a)
console.log(b)

let elems = [1, 2, 3, 4]

let [a, b] = elems.reduce((res, x, i) => (res[i&1].push(x), res), [[], []])

console.log(a)
console.log(b)

→ Ссылка