如何将单个数组转换为每个包含两个成员的数组

How to do I convert a single array into an array of arrays of two members each

let flattened = [[0, 1], [2, 3], [4, 5]].reduce(
  function(accumulator, currentValue) {
    return accumulator.concat(currentValue)
  },
  []
)
// flattened is [0, 1, 2, 3, 4, 5]

我该如何撤销?

我有这个数组 [0, 1, 2, 3, 4, 5],我想转换成这个数组 [ [0, 1], [2, 3], [4, 5] ];

const result = [0, 1, 2, 3, 4, 5].reduce(
    (acc, val) => {
        if (acc[acc.length - 1].length < 2) {
            acc[acc.length - 1].push(val);
        } else {
            acc.push([val]);
        }

        return acc;
    },
    [[]],
);

console.log(result);

此代码段创建一个包含多个索引的数组,然后映射每个分区的起始索引,并在下一个 map 中使用该索引根据给定大小获取原始数组的一部分。

const value = [0, 1, 2, 3, 4, 5];

const arrayChunks = (array, size) => Array(Math.ceil(array.length / size)).fill()
  .map((entry, index) => index * size)
  .map(begin => array.slice(begin, begin + size));
  
let result = arrayChunks(value, 2);
console.log(result);

或者,更命令式的方法

function convert(arr) {
    const nextArray = [];
 
    for (let i = 0; i < arr.length; i += 2) {    
        // Handle case where there is no pair for the element
        // Can be removed if not required
        const isLastElement = arr.length === i + 1;

        if (isLastElement) {
           nextArray.push([arr[i]]);
        } else {
           nextArray.push([arr[i], arr[i + 1]]);        
        }
        
    }

    return nextArray;
}

const result1 = convert([1,2,3,4]);
const result2 = convert([1,2,3]);

console.log('Even', result1);
console.log('Odd', result2);

foreach 的另一种方式:

const data = [0,1,2,3,4,5]

let subArray = [];
let result = []
data.forEach((val, i) => {
  subArray.push(val);
  if(subArray.length == 2 || i == (data.length - 1)) {
    result.push(subArray);
    subArray = [];
  }
})

console.log(result)