我如何将一个数组分为两个具有交替元素的数组

时间:2018-06-28 20:05:04

标签: javascript arrays filter

我想将字符串数组分成两个数组。 但是,当我将字符串推入新数组时,它应该是交替的。因此,如果数组为:

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 :(得分:11)

您可以将两个数组都作为一个数组,然后将索引作为要推送的所需数组的指示器。

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

答案 1 :(得分: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)

答案 2 :(得分:1)

为获得更好的可读性,为此配备单独的过滤器功能没有错。要稍微清理一下,可以使用箭头功能,使它们成为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);

答案 3 :(得分: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);