如何将一个数组拆分为两个数组,其中包含交替的元素?

6
我希望将一个字符串数组拆分成两个数组。然而,当我将字符串推入新数组时,它应该是交替的。因此,如果数组是:
let alph = [a,b,c,d,e,f]

然后,新的数组将如下所示:
firstArr = [a,c,e]
secondArr = [b,d,f]

我该如何避免重复代码?以下是我的代码,它可以正常工作,但我不想写两个相同的过滤函数(保持DRY原则):

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

13
你可以使用两个数组的组合,并将索引用作推送所需数组的指示器。
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);


2

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)


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

你可以使用reduce来实现:

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);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接