数组扁平化的几种方法

2021-07-08  本文已影响0人  AAA前端
[1, [2, 3, [4, 5]]]  ------>    [1, 2, 3, 4, 5]
  1. 使用reduce方法递归实现
function flatten(list){
    return list.reduce((list,item)=>{
      return list.concat(Array.isArray(item) ? flatten(item):  item);
    },[])
  }
  1. 使用toString() 和map 方法

[1, [2, 3, [4, 5]]].toString() => '1,2,3,4,5'
然后按逗号分隔为数组 => ['1', '2', '3', '4', '5']
再把数组中每项字符串转换为数字

function flatten(list){
  return list.toString().split(',').map(item=>Number(item))
}
  1. join()与map方法
    与 toString()方法一样 join也可以把数组转换为一维字符串
function flatten(list){
  return list.join().split(',').map(item=>Number(item))
}
  1. map方法递归

function flatten(arr){
  var list =  []
  arr.map(item=>{
    if(Array.isArray(item)){
      list = list.concat(flatten(item))
    } else {
      list.push(item)
    }
  })
  return list
}
  1. es6的扩展运算符能将二维数组变为一维
    [...[1,2,[4]]] => [1,2,[4]]
function flatten(arr) {
    while(arr.some(item=>Array.isArray(item))) {
        arr = [].concat(...arr);
    }
    return arr;
}
  1. flat(Infinity)
arr.flat(Infinity)
  1. 正则
JSON.stringify(arr).replace(/[\[|\]]/g, '').split(',').map(item=>Number(item))

参考:https://www.cnblogs.com/chenhuichao/p/13564682.html

上一篇下一篇

猜你喜欢

热点阅读