数组扁平化:将一个多维数组,展开成一个一维数
let arr = [1,[2,3],[4,[5,6,[7]]],8];
⇒ [1,2,3,4,5,6,7,8]
数组中嵌套数组自然会想到利用递归来做,只要里面还是数组就一直向里面探索,这里就涉及到如何判断一个是不是数组,或者判断数组有几种方式
方式1 递归
function myFlat(arr) {
const res = [];
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
res.push(...myFlat(arr[i]));
} else {
res.push(arr[i]);
}
}
return res;
}
数组方法经常用,才能够活学活用……
function flat(arr) {
while (arr.some(item => Array.isArray(item))) {
arr = [].concat(...arr);
};
return arr;
};
方式2 利用api
const res1 = arr.flat(Infinity);
flat()
里面传入一个数字,表示分开的层数,Infinity表示展开无限层
let arr = [1,[2,3],[4,[5,6,[7]]],8];
arr.flat(1) = (6) [1, 2, 3, 4, Array(3), 8]
方式3 正则
const res2 = JSON.stringify(arr).replace(/\[|\]/g, '').split(',');
这个得到的是字符串
(8) ["1", "2", "3", "4", "5", "6", "7", "8"]
优化后:
const res3 = JSON.parse('[' + JSON.stringify(arr).replace(/\[|\]/g, '') + ']');