阅读 84

面试:数组扁平化

数组扁平化(数组拉平)

什么是数组扁平化

  1. 扁平化,顾名思义就是减少复杂性装饰,使其事物本身更简洁、简单,突出主题。
  2. 数组扁平化,对着上面意思套也知道了,就是将一个复杂的嵌套多层的数组,一层一层的转化为层级较少或者只有一层的数组。

flatten Array.prototype.flat可以使数组扁平化,效果就会如下:

const arr = [1, [2, [3, 4]]];
console.log(flatten(arr)); // [1, 2, 3, 4]
console.log(arr.flat());//[1,2,3,4]
复制代码

简单实现

普通递归方法

普通递归方法是一般面试者最容易想到的方法,此方法可以很好地体现你对递归与数组的理解。

let arr=[1,[2,3],[4,5]]
function ArrayFlat(arr){
  let target=[];
  arr.forEach(element=>{
    if(!Array.isArray(element)){
      target.push(element);
    }else{
      target=target.concat(ArrayFlat(element))
    }
  })
  return target
}
let result=ArrayFlat(arr);
console.log(result);//[1,2,3,4,5]
复制代码

reduce 实现 flat 函数

此方法原理跟递归方法是一样的,但利用了reduce进行数组遍历,使得代码显得更加简洁,能很好地向面试官展现你对reduce的掌握。

const arr = [1, 2, 3, 4, [1, 2, 3, [1, 2, 3, [1, 2, 3]]], 5, "string", { name: "弹铁蛋同学" }]

// 首先使用 reduce 展开一层
arr.reduce((pre, cur) => pre.concat(cur), []);
// [1, 2, 3, 4, 1, 2, 3, [1, 2, 3, [1, 2, 3]], 5, "string", { name: "弹铁蛋同学" }];

// 用 reduce 展开一层 + 递归
const flat = arr => {
  return arr.reduce((pre, cur) => {
    return pre.concat(Array.isArray(cur) ? flat(cur) : cur);
  }, []);
};
// [1, 2, 3, 4, 1, 2, 3, 1, 2, 3, 1, 2, 3, 5, "string", { name: "弹铁蛋同学" }];

复制代码
文章分类
前端
文章标签