参考文章:面试官连环追问:数组拍平(扁平化) flat 方法实现 - 掘金
使用参考:Array.prototype.flat() - JavaScript | MDN
用途:flat用于拍平嵌套数组,返回一个新数组,对原数组没有影响
使用:
实现
arr instanceof Array
// true
arr.constructor === Array
// true
Object.prototype.toString.call(arr) === '[object Array]'
// true
Array.isArray(arr)
// true
简单实现
// concat + 递归
function flat(arr) {
let arrResult = [];
arr.forEach((item) => {
if (Array.isArray(item)) {
arrResult = arrResult.concat(flat(item)); // 递归
} else {
arrResult.push(item);
}
});
return arrResult;
}
数据
const arr = [
1,
2,
3,
4,
[1, 2, 3, [1, 2, 3, [1, 2, 3]]],
5,
"string",
{ name: "弹铁蛋同学" },
];
通过reduce实现,并添加层级
// reduce + 递归 + num控制层级
function flat(arr, num = 1) {
return num > 0
? arr.reduce(
(pre, cur) =>
pre.concat(Array.isArray(cur) ? flat(cur, num - 1) : cur),
[]
)
: arr.slice();
}
注意reduce内部的箭头函数,不能有括号,否则会报错