手撕数组flat功能
正常情况下,要想扁平化数组,用到flat方法具体多少深度,传入相应的数字即可!
let arrs = [1, 2, [3, [4, [5,[3333]]]]]
const reasut = arrs.flat(3) //输出结果 result
那么自己写怎么实现呢?
基本思路:
1、需要知道数组的深度(本案例讲数组转化为字符串,判断 ‘[’ 与 ‘]’ 的个数,得到层级)
2、借助reduce,深度为循环次数,合并得到新数组,返回即可。
let arrs = [1, 2, [3, [4, [5,[3333]]]]]
console.log('result', getFlat(arrs)); //输出结果 result
function getFlat(arrayA) {
var flatArray = arrayA.concat();
var maxArrDeepIn = getArrayDeepin(arrayA);
for (var i = 1; i <= maxArrDeepIn; i++) {
// 单层合并
flatArray = flatArray.reduce((prev, item) => {
return prev.concat(item);
}, [])
}
return flatArray;
}
//思路:转字符串,遍历字符串,找到 [ 字符深度加一,找到 ] 字符深度减一
function getArrayDeepin(arr) {
let str = JSON.stringify(arr)
let max = 0;
let cur = 0;
for (let key in str) {
if (str[key] == "[") {
cur++;
}
if (str[key] == "]") {
cur--;
}
if (max < cur) {
max = cur
}
}
return max;
}
案例中,部分代码是网络大神提供的,我在此基础上做了整合!