记录一下写的数组扁平化方法
因为数组可能有多层嵌套,首先想到的解决方法一定是递归实现,同对象的深拷贝;
其次实现过程中几个小问题
- 判断数组实例:可以用Array.isArray(param),可以用instanceof判断
- 合并数组:可以用数组的cancat方法实现,也可以用push+扩展运算符...实现
递归实现
// 数组扁平化
// 1.递归实现
let arr = [1,[2,3,[4,5]]];
let flatFun1 = function(arr){
let result = [];
arr.forEach(element => {
if (element instanceof Array) {
result.push(...flatFun1(element));
} else {
result.push(element);
}
});
return result;
}
console.log(JSON.stringify(flatFun1(arr)));
递归中运用reduce累计器实现
// 2.递归使用reduce实现
let arr = [1,[2,3,[4,5]]];
let flatFun2 = function(arr){
return arr.reduce((pre,cur) => {
if (Array.isArray(cur)) {
return pre.concat(flatFun2(cur));
} else {
return pre.concat(cur);
}
},[]);
}
console.log(JSON.stringify(flatFun2(arr)));
ES6自带方法
// 3.ES6自带方法flat
console.log([1,[2,3,[4,5]]].flat(Infinity));
简单介绍一下flat方法,由数组实例调用并返回一个新数组,不影响原数组,可接受一个非必须参数,无参数时默认展开一层数组,参数为需要展开的层数,全部展开可以传入Infinity
作为参数
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。