【问题标题】:How can I split an array into two arrays with alternating elements如何将数组拆分为具有交替元素的两个数组
【发布时间】:2018-12-07 23:39:08
【问题描述】:

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

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

【问题讨论】:

    标签: javascript arrays filter


    【解决方案1】:

    您可以取两个数组的一个数组,并将索引作为推送所需数组的指示符。

    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)

      【讨论】:

        【解决方案3】:

        为了提高可读性,为这些设置单独的过滤器功能并没有错。要稍微清理一下,您可以使用箭头函数并将它们设为 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);
        

        【讨论】:

          【解决方案4】:

          您可以为此使用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);

          【讨论】:

            猜你喜欢
            • 2010-11-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-04-13
            相关资源
            最近更新 更多