如何做 我将单个数组转换为每个数组两个成员的数组数组


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)