使用场景:接口返回一个数组,展示时每行固定显示n个,则可将返回的数组转成二维数组[[…n], […n]…]的形式循环展示

1. 一维数组转二维数组

  1. let baseArray = [1, 2, 3, 4, 5, 6, 7, 8]
  2. let len = baseArray.length
  3. let n = 4 //假设每行显示4个
  4. let lineNum = len % 4 === 0 ? len / 4 : Math.floor(len / 4 + 1)
  5. let res = []
  6. for (let i = 0; i < lineNum; i++) {
  7. // slice() 方法返回一个从开始到结束(不包括结束)选择的数组的一部分浅拷贝到一个新数组对象。且原始数组不会被修改。
  8. let temp = baseArray.slice(i * n, i * n + n)
  9. res.push(temp)
  10. }
  11. console.log(res)

输出
image.png
将其封装为如下

  1. function conversion (baseArray,n){
  2. let len = baseArray.length
  3. let lineNum = len % n === 0 ? len / n : Math.floor(len / n + 1)
  4. let res = []
  5. for (let i = 0; i < lineNum; i++) {
  6. // slice() 方法返回一个从开始到结束(不包括结束)选择的数组的一部分浅拷贝到一个新数组对象。且原始数组不会被修改。
  7. let temp = baseArray.slice(i * n, i * n + n)
  8. res.push(temp)
  9. }
  10. return res
  11. }

结果如下图
image.png

2. 二维数组转一维数组

优点: 多维数组也可以

  1. let arr1 = [[0, 1], [2, 3], [4, 5]];
  2. function flatten(arr) {
  3. return [].concat( ...arr.map(x => Array.isArray(x) ? flatten(x) : x) )
  4. }
  5. let arr2 = flatten(arr1);
  6. let arr = [[1,2],3,[[[4], 5]]]

输出下图
image.png