数组扁平化:把多层嵌套的数组中的内容取出,变成一维的数组。


一、递归

  1. /*
  2. 1. 创建一个函数,遍历数组
  3. 2. 判断数组中是否还包含数组,有?递归 ,没有? push
  4. */
  5. var arr = ['我','是','谁',['html','css','js',[1,2,3]]];
  6. var newArr = [];
  7. falt(arr);
  8. function falt(arr){
  9. for(var i=0;i<arr.length;i++){
  10. if(Array.isArray(arr[i])){
  11. falt(arr[i]);
  12. }else{
  13. newArr.push(arr[i]);
  14. }
  15. };
  16. };
  17. console.log(newArr); // ['我','是','谁','html','css','js',1,2,3];

二、利用 arr.flat() 扁平化多维数组

语法:arr.flat([depth])
其中depth是flat 的参数,depth是可以传递数组的展开深度(默认不填、数值是1),即展开一层数组。那么如果多层的该怎么处理呢?参数也可以传进 Infinity,代表不论多少层都要展开。那么我们来看下flat方注怎么实和洁看下面的代配

  1. /*
  2. Array - arr.flat([depth]) 扁平化多维数组
  3. 1. 可选参数:depth 指定要提取嵌套数组的结构深度,默认值为 1。
  4. 2. 返回值:一个包含将数组与子数组中所有元素的新数组
  5. 3. Infinity 无限扁平
  6. */
  7. let arr = [[1,2],[3,4],[[6,7],[[8],[9,10]]]];
  8. let el = arr.flat(Infinity);
  9. console.log(el); // [1, 2, 3, 4, 6, 7, 8, 9, 10];
  10. ----------------------------------------------------------------------------------------
  11. var arr = [1, [2, [4, [5, [6]]]]]
  12. function flatten4(arr) {
  13. return arr.flat(Infinity)
  14. }
  15. console.log(flatten4(arr)) // [1,2,3,4,5,6]

三、reduce 方法

见reduce详细介绍
(1)将二维数组转化为一维

  1. let arr = [[0, 1], [2, 3], [4, 5]]
  2. let newArr = arr.reduce((pre,cur)=>{
  3. return pre.concat(cur)
  4. },[])
  5. console.log(newArr); // [0, 1, 2, 3, 4, 5]

(2)将多维数组转化为一维

  1. let arr = [[0, 1], [2, 3], [4,[5,6,7]]]
  2. const newArr = function(arr){
  3. return arr.reduce((pre,cur)=>pre.concat(Array.isArray(cur)?newArr(cur):cur),[])
  4. } //运用了递归
  5. console.log(newArr(arr)); //[0, 1, 2, 3, 4, 5, 6, 7]

四、利用数组转成字符串,再字符串转成数组

image.png
join方法:数组转化成字符串,用“,”分割。
split方法:字符串转化成数组,以“,”为界
map方法:

https://www.bilibili.com/video/BV1L64y1S7vm?spm_id_from=333.337.search-card.all.click