JS怎么实现将一维数组转换成二维数组?

新手上路,请多包涵

比如
arr1 = [2,2,2,5,5,6,6,6,6,7];
按相同拆分
想得到
arr2 = [[2,2,2],[5,5],[6,6,6,6],[7]];

阅读 6.3k
4 个回答
let arr1 = [2,2,2,5,5,6,6,6,6,7];
function trans (arr) {
    let pre = NaN
    let result = []
    let curArr
    arr.forEach(cur => {
        if (cur === pre) {
            curArr.push(cur)
        } else {
            curArr = [cur]
            result.push(curArr)
            pre = cur
        }
    })
    return result
}
trans(arr1)
[2,2,2,5,5,6,6,6,6,7]
.reduce((m,n) => (m[n] = (m[n] || []).concat(n), m),[])
.filter(a => a)

clipboard.png

你的一维数组是否已经排好序?
如果已经排好,处理比较简单,否则会比较麻烦。

新手上路,请多包涵
const arr = [2, 2, 2, 5, 5, 6, 6, 6, 6, 7];
const map = new Map();

arr.forEach((n) => {
  if (map.has(n)) {
    map.set(n, [...map.get(n), n]);
  } else {
    map.set(n, [n]);
  }
});

console.log('collect values: ', [...map.values()]);
// collect values:  [ [ 2, 2, 2 ], [ 5, 5 ], [ 6, 6, 6, 6 ], [ 7 ] ]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题