Skip to content

实现数组的flat方法,支持深度层级参数

Posted on:2024年8月23日 at 05:25

实现 Array.prototype.flat 方法,支持指定深度层级的数组扁平化,可以按照以下步骤进行:

  1. 定义函数:创建一个 flat 方法,接受一个可选的深度层级参数。
  2. 递归处理:根据深度层级递归地将嵌套的数组元素展开。
  3. 处理非数组元素:将非数组元素直接添加到结果中。

实现代码

Array.prototype.myFlat = function (depth = 1) {
  // 如果深度为 0,直接返回当前数组的副本
  if (depth < 1) {
    return [...this];
  }

  // 递归扁平化数组
  const flatten = (arr, d) => {
    let result = [];
    for (const item of arr) {
      // 如果元素是数组并且深度大于 0,则递归扁平化
      if (Array.isArray(item) && d > 0) {
        result.push(...flatten(item, d - 1));
      } else {
        result.push(item);
      }
    }
    return result;
  };

  return flatten(this, depth);
};

// 示例用法
const arr = [1, [2, [3, [4, 5]]], 6];
console.log(arr.myFlat()); // 输出: [1, 2, [3, [4, 5]], 6]
console.log(arr.myFlat(1)); // 输出: [1, 2, [3, [4, 5]], 6]
console.log(arr.myFlat(2)); // 输出: [1, 2, 3, [4, 5], 6]
console.log(arr.myFlat(3)); // 输出: [1, 2, 3, 4, 5, 6]
console.log(arr.myFlat(0)); // 输出: [1, [2, [3, [4, 5]]], 6]

解释

  1. 深度检查

    • depth = 1:设定默认深度为 1。
    • 如果深度为 0,则返回数组的浅拷贝。
  2. 递归扁平化函数 flatten

    • 遍历数组中的每个元素。
    • 如果元素是数组且当前深度大于 0,则递归调用 flatten,将深度减 1。
    • 否则,直接将元素推入结果数组中。
  3. 合并结果

    • 使用展开运算符 ... 合并递归结果。

总结

原文转自:https://fe.ecool.fun/topic/068836c3-c6b3-4c4c-b24e-301357cf01c1