2625.扁平化嵌套数组


Spread operator(…) vs Array.prototype.concat() in JavaScript

spread operator vs array.concat()

网上查了一下 concat 比展开运算法的效率更高,但是程序里面一开始用 concat 就提示超时无法通过,换成展开运算符就可以了。
暂时还没搞明白这点,先 mark 一下。

[]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

/**
* @param {any[]} arr
* @param {number} depth
* @return {any[]}
*/
var flat = function (arr, n) {
// 首先,我们检查深度 n 是否小于等于 0 或者输入数组 arr 是否为空。如果是,直接返回原数组,因为不需要进行扁平化操作。
if (n <= 0 || arr.length === 0) {
return arr;
}
// 对于非空且深度 n 大于 0 的情况,我们创建一个空数组 result 来存储扁平化后的结果。
let result = [];
// 我们遍历输入数组 arr 中的每个元素 item。
for (let i of arr) {
// 如果 item 是一个数组,我们递归调用 flattenArray 函数,并将深度 n 减去 1,以便在下一层继续扁平化。然后,将递归结果与 result 数组连接起来。
if (Array.isArray(i)) {
// 用 concat 有一个测试用例会超时
//result = result.concat(flattenArray(item, n - 1));
// 换成展开运算符通过
result.push(...flat(i, n - 1));
} else {
// 如果 item 不是数组,说明它是一个基本元素,直接将其添加到 result 数组中。
result.push(i);
}
}
// 最后,返回 result 数组作为扁平化后的结果。
return result;
};