数组扁平化的方法-

188 阅读1分钟

扁平化

数组的扁平化其实就是将一个嵌套多层的数组 array(嵌套可以是任何层数)转换为只有一层的数组。

1.ES6的flat函数实现

function flatten(arr,Infinity){    
  return arr.flat(Infinity);
}  
var arr = [1, [2, [4, [5, [6]]]],[12,'23',[1,2]]];
console.log(flatten(arr,4));// [1, 2, 4, 5, 6, 12, '23', 1, 2]

2.使用递归方式

function flatten(arr){    
  let newArr = [];
  arr.forEach(element => {
    if(Array.isArray(element)){
      newArr = newArr.concat(flatten(element));
    }else{
      newArr.push(element);
    }
  });
  return newArr;
}  
var arr = [1, [2, [4, [5, [6]]]],[12,'23',[1,2]]];
console.log(flatten(arr));//[1, 2, 4, 5, 6, 12, '23', 1, 2]

3.利用reduce函数迭代

function flatten(arr){    
  let newArr = [];
  newArr = arr.reduce((pre,cur) => {
    return pre.concat( Array.isArray(cur) ? flatten(cur) : cur);
  },[])
  return newArr;
}  
var arr = [1, [2, [4, [5, [6]]]],[12,'23',[1,2]]];
console.log(flatten(arr));// [1, 2, 4, 5, 6, 12, '23', 1, 2]

4.split和toString共同处理

由于数组会默认带一个toString()的方法,所以可以把数组直接转换成逗号分隔的字符串,
然后再用split()方法把字符串重新转换为数组
但是这种转换方式会有个问题,元素类型会被转换成字符串类型如下面的代码所示。
function flatten(arr){    
  return arr.toString().split(',')
}  
var arr = [1, [2, [4, [5, [6]]]],[12,'23',[1,2]]];
console.log(flatten(arr));// ['1', '2', '4', '5', '6', '12', '23', '1', '2']

5.使用正则

1.  首先是使用 JSON.stringify 配合 正则 将数组转换成字符串
3.  然后再拼接数组括号转为数组对象
function flatten(arr){    
  let string_arr = JSON.stringify(arr).replace(/\[|\]/g,'');
  return  JSON.parse('[' + string_arr + ']');    
}  
var arr = [1, [2, [4, [5, [6]]]],[12,'23',[1,2]]];
console.log(flatten(arr));