# 数组扁平化
# 题目要求
要求使用递归、迭代,两种解法去手写数组扁平化。
# 答案解析
1、递归
let testArr = [1, 2, [1, [2, 3, [4, 5, [6]]]]];
function flatter(arr) {
if (arr.length == 0) return;
return arr.reduce(
(pre, cur) =>
Array.isArray(cur) ? [...pre, ...flatter(cur)] : [...pre, cur],
[]
);
}
console.log(flatter(testArr)); // [ 1, 2, 1, 2, 3, 4, 5, 6]
2、迭代
let testArr = [1, 2, [1, [2, [, 3, 4, 5, 6], 3, [4, 5, [6]]]]];
function flatter(arr) {
// 当数组中存在数组类型的数组元素,则继续使用扩展运算符扁平化。
while (arr.some((item) => Array.isArray(item))) {
arr = [].concat(...arr);
}
return arr;
}
console.log(flatter(testArr));// [ 1, 2, 1, 2, undefined, 3, 4, 5, 6, 3, 4, 5, 6 ]
# 思路要点
1、当遇到数组时,递归返回值,并将上一个结果与递归返回的数组一同使用扩展运算符,并放入同一数组。 2、while迭代实际上也算一种递归,每次将判断新的arr内是否有数组,再使用扩展运算符将内数组扩展开来。