以下为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()来在结果数组开头添加元素。