当前位置:首页 > JavaScript

js实现数组扁平化输出

2026-04-05 02:31:00JavaScript

方法一:使用 Array.prototype.flat()

ES2019 引入的 flat() 方法可以直接将嵌套数组扁平化。默认情况下,flat() 只会扁平化一层,可以通过传入参数指定深度,或使用 Infinity 完全扁平化。

const nestedArray = [1, [2, [3, [4]], 5]];
const flattened = nestedArray.flat(Infinity);
console.log(flattened); // 输出: [1, 2, 3, 4, 5]

方法二:递归实现

通过递归遍历数组,将嵌套的数组逐层展开。适用于不支持 flat() 的老版本浏览器或需要自定义处理的情况。

js实现数组扁平化输出

function flattenArray(arr) {
  let result = [];
  arr.forEach(item => {
    if (Array.isArray(item)) {
      result.push(...flattenArray(item));
    } else {
      result.push(item);
    }
  });
  return result;
}

const nestedArray = [1, [2, [3, [4]], 5]];
console.log(flattenArray(nestedArray)); // 输出: [1, 2, 3, 4, 5]

方法三:使用 reduce 实现

结合 Array.prototype.reduce 和递归,可以更简洁地实现扁平化。

function flattenArray(arr) {
  return arr.reduce((acc, item) => 
    acc.concat(Array.isArray(item) ? flattenArray(item) : item), []);
}

const nestedArray = [1, [2, [3, [4]], 5]];
console.log(flattenArray(nestedArray)); // 输出: [1, 2, 3, 4, 5]

方法四:利用 toStringsplit

如果数组仅包含数字或字符串,可以先将数组转换为字符串,再通过 split 分割为扁平数组。注意此方法会将所有元素转为字符串。

js实现数组扁平化输出

const nestedArray = [1, [2, [3, [4]], 5]];
const flattened = nestedArray.toString().split(',').map(Number);
console.log(flattened); // 输出: [1, 2, 3, 4, 5]

方法五:使用 Generator 函数

通过生成器函数逐层展开嵌套数组,适合处理大规模数据或需要惰性计算的场景。

function* flattenGenerator(arr) {
  for (const item of arr) {
    if (Array.isArray(item)) {
      yield* flattenGenerator(item);
    } else {
      yield item;
    }
  }
}

const nestedArray = [1, [2, [3, [4]], 5]];
const flattened = [...flattenGenerator(nestedArray)];
console.log(flattened); // 输出: [1, 2, 3, 4, 5]

方法六:堆栈迭代实现

非递归的堆栈实现方式,避免递归可能导致的调用栈溢出问题,适合处理深层嵌套数组。

function flattenArray(arr) {
  const stack = [...arr];
  const result = [];
  while (stack.length) {
    const next = stack.pop();
    if (Array.isArray(next)) {
      stack.push(...next);
    } else {
      result.push(next);
    }
  }
  return result.reverse();
}

const nestedArray = [1, [2, [3, [4]], 5]];
console.log(flattenArray(nestedArray)); // 输出: [1, 2, 3, 4, 5]

注意事项

  1. 数据类型一致性:递归或迭代方法可能因数据类型复杂(如对象、null)需要额外处理。
  2. 性能差异flat() 是原生方法,性能通常最优;递归在大数据量时可能栈溢出。
  3. 浏览器兼容性flat() 需 ES2019+ 环境,旧环境需使用 polyfill 或替代方案。

标签: 数组扁平化
分享给朋友:

相关文章

java如何初始化数组

java如何初始化数组

初始化数组的方法 在Java中,数组可以通过多种方式进行初始化。以下是几种常见的方法: 静态初始化(直接赋值) 在声明数组时直接指定元素值,适用于已知数组内容的情况: int[] numbers…

vue实现数组双向绑定

vue实现数组双向绑定

实现数组双向绑定的方法 在Vue中,实现数组的双向绑定通常需要结合v-model指令或自定义事件处理。以下是几种常见的方法: 使用v-model绑定数组 Vue的v-model指令默认支持表单元素的…

vue数组监听怎么实现

vue数组监听怎么实现

监听数组变化的方法 在Vue中,由于JavaScript的限制,直接通过索引修改数组或修改数组长度时,Vue无法自动检测这些变化。需要采用特定方法来实现数组的响应式更新。 使用Vue.set或thi…

原生加数组实现vue

原生加数组实现vue

使用原生 JavaScript 和数组实现 Vue 的核心功能 Vue 的核心功能包括数据响应式、模板渲染和指令绑定。通过原生 JavaScript 和数组可以模拟部分功能,以下是一个简化版的实现方式…

react如何倒着渲染数组

react如何倒着渲染数组

倒序渲染数组的几种方法 在React中倒序渲染数组可以通过多种方式实现,以下是几种常见的方法: 使用reverse()方法 直接调用数组的reverse()方法会改变原数组,因此在渲染前需要创建副本…

react如何给数组添加值

react如何给数组添加值

使用 push 方法(需注意不可变性) 在 React 中直接使用 push 会修改原数组,违反不可变原则。推荐先复制数组再操作: const [items, setItems] = useStat…