以下为ChatGPT自动生成的解答,正确与否请自行判断。
BFE.devAI解答 - JavaScript 代码题
3. 实现Array.prototype.flat()
使用递归的方式实现Array.prototype.flat():
function flat(arr, depth = 1) {
return depth > 0 ?
arr.reduce((acc, val) =>
Array.isArray(val) ?
acc.concat(flat(val, depth - 1)) :
acc.concat(val)
, []) :
arr.slice();
}
使用迭代的方式实现Array.prototype.flat():
function flat(arr, depth = 1) {
const result = [];
const stack = arr.map(val => ({ value: val, depth: 0 }));
while (stack.length) {
const { value, depth } = stack.pop();
if (Array.isArray(value) && depth < depth) {
for (let i = value.length - 1; i >= 0; i--) {
stack.push({ value: value[i], depth: depth + 1 });
}
} else {
result.unshift(value);
}
}
return result;
}
其中使用了一个栈来存储当前的值和深度,类似于DFS的迭代写法。每次取出栈顶元素,如果是数组并且深度未达到指定层数,就将子元素依次推入栈中;否则说明已经扁平化到了指定深度,就将当前值加入结果数组中即可。由于需要保持顺序不变,这里使用了unshift()
来在结果数组开头添加元素。