Как я могу разбить массив на два массива с чередующимися элементами - PullRequest
0 голосов
/ 28 июня 2018

Я хочу разбить массив строк на два массива. Однако когда я вставляю строки в новые массивы, они должны чередоваться. Итак, если массив:

let alph = [a,b,c,d,e,f]

Тогда новые массивы будут выглядеть так:

firstArr = [a,c,e]
secondArr = [b,d,f]

Как я могу это сделать, чтобы не повторяться? У меня есть следующий код, и он работает, но я не хочу писать две одинаковые функции фильтра (оставьте СУХОЙ):

let firstArr = alph.filter((letter, index) => {
  return index % 2 === 0;
})

Ответы [ 4 ]

0 голосов
/ 29 июня 2018

Вы можете использовать уменьшить для этого:

const alph = ['a', 'b', 'c', 'd', 'e', 'f'];

const result = alph.reduce((acc, letter, ndx) => {
  acc[ndx % 2] = acc[ndx % 2] || [];
  acc[ndx % 2].push(letter);
  return acc;
}, []);

const [firstArr, secondArr] = result;

console.log(firstArr, secondArr);
0 голосов
/ 28 июня 2018

Поскольку filter создает один массив, вам нужно два или используйте, например, forEach

var arr = ["a","b","c","d","e","f"], firstArr = [], secondArr = [];

arr.forEach( (a,i) => {
  (i % 2 === 0) ? firstArr.push(a) : secondArr.push(a);
})

console.log(firstArr)
console.log(secondArr)
0 голосов
/ 28 июня 2018

Для лучшей читаемости нет ничего плохого в том, чтобы иметь отдельные функции фильтра для них. Чтобы немного его очистить, вы могли бы использовать функции стрелок и сделать их 1 лайнером, а затем передать их в функцию фильтра, например:

const alpha = ['a', 'b', 'c', 'd', 'e', 'f'];
const filterByEvens = (letter, index) => index % 2 === 0;
const filterByOdds = (letter, index) => index % 2 !== 0;
const evens = alpha.filter(filterByEvens);
const odds = alpha.filter(filterByOdds);
0 голосов
/ 28 июня 2018

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

let alph = ['a', 'b', 'c', 'd', 'e', 'f'],
    first = [],
    second = [],
    temp = [first, second];
    
alph.forEach((v, i) => temp[i % 2].push(v));

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