数组如何一维变二维?

需要将const a1= [1,11,2,22,3,33];变成const b1= [[1,11],[2,22],[3,33]];将一维的数组变成一个二维的数组,最简单高效的办法是什么?

阅读 2.7k
3 个回答
const a1 = [1, 11, 2, 22, 3, 33];

const b1 = Array.from(
  {length: Math.ceil(a1.length / 2)},
  (v, i) => a1.slice(i * 2, i * 2 + 2),
);

console.log(b1)

比较简洁,要分割其他大小子数组只要将数字2替换成要分割的子数组数量即可
也可以像楼上直接封装成方法

const chunk = (arr, size) => Array.from(
  {length: Math.ceil(arr.length / size)},
  (v, i) => arr.slice(i * size, i * size + size),
);

const b1 = chunk(a1, 2);

console.log(b1)

最简单是直接使用 lodash.chunk
也可以实现一个简单的 chunk

const chunk = (arr, size) => arr.reduce((acc, item) => {
    let lastIndex = acc.length - 1
    let last = acc[lastIndex];

    if(!last || last.length === size) {
        last = []
        lastIndex++
    }

    last.push(item) 
    acc.splice(lastIndex, 1, last)

    return acc
}, [])

console.log(chunk([1, 11, 2, 22, 3, 33], 2))
var a1= [1,11,2,22,3,33];
var arr = [];
for(var i = 0, len = a1.length; i< len; i++){
    arr.push([a1[i], a1[++i]]);
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题