我想将字符串数组分成两个数组。 但是,当我将字符串推入新数组时,它应该是交替的。因此,如果数组为:
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;
})
答案 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);