什么是数组扁平化?
[1,2,3,[1,2]]->[1,2,3,1,2]
[1,2,3,[1,2,[3,4]]]->[1,2,3,1,2,3,4]
就是将多维数组摊平成一维数组,那么接下来就给大家介绍几种方法:
一.数组方法
数组方法arr.flat()
- 不传参数扁平化默认深度是 一层
- 传参数 arr.flat(2)深度就是2层
- 参数如果是 正无穷,扁平化 无限层级的数组
二.递归实现
在数组的原型上自己添加一个方法。
常见一个新空数组;遍历原数组
遍历 this-》arr -- 把他里面的元素添加到 resArr
判断元素 是不是一个数组,如果不是,
直接添加到resArr中,如果是,就把元素 合并到 resArr中
let a = [...[3,4]]
[ ].concat([3,4])
[ ].push(...[3,4])
三.非递归
在数组原型上添加一个方法
使用后数组方法.shift()删除头部 筛选数组
每次删除 头部的一个元素,判断不是一个数组,
如果不是 直接添加到 resArr中
如果是
let arr2 = [1, 2, [3, 4, [5, 6]], [2, 3, 4]];
// 非递归
Array.prototype.myFlat2 = function () {
let resArr = [];
/*
arr [1, 2, [3, 4, [5, 6]]]
stacks = [5, 6]
*/
let stacks = [...this];
let i = 0;
while (stacks.length > 0) {
//每次删除 头部的一个元素,判断不是一个数组,
// 如果不是 直接添加到 resArr中
// 如果是
let v = stacks.shift();
if (Array.isArray(v)) {
stacks.push(...v);
} else {
resArr.push(v);
}
}
return resArr;
};
console.log(arr2.myFlat2());