JS实现数组扁平化

数组扁平化:将一个多维数组转换为一个一维数组
举个例子:

var arr = [1, 2, [3, 4], [5, 6, [7, 8]]]

扁平化后

arr = [1, 2, 3, 4, 5, 6, 7, 8]

实现方法:

1.Array.prototype.flat()

  • flat() 方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。
var arr = [1, 2, [3, 4], [5, 6, [7, 8]]]

遍历深度默认为1
arr.flat() 
[ 1, 2, 3, 4, 5, 6, [ 7, 8 ] ]

arr.flat(2) 
[ 1, 2, 3, 4, 5, 6, 7, 8 ]

遍历深度无限深
arr.flat(Infinity) 
[ 1, 2, 3, 4, 5, 6, 7, 8 ] 

2.递归实现

function flatten(arr) {
  let newArr = []
  for(let i in arr) {
    //如果元素为数组,递归调用该函数
    if(Array.isArray(arr[i])) {
      newArr = newArr.concat(flatten(arr[i]))
    } else {
      //不是数组,将其添加到新数组
      newArr.push(arr[i])
    }
  }
  return newArr
}

3.reduce迭代

function flatten(arr) {
  return arr.reduce((acc, val) => {
    return acc.concat(Array.isArray(val) ? flatten(val) : val)
  }, [])
}

4.toString和split
toString()会将数字转换为逗号分隔的字符串,再使用split将其转换为数组

function flatten(arr) {
  //toString()会将元素转换为字符串类型,调用map(Number)将其转换为数字类型
  return arr.toString().split(',').map(Number)
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容