当前位置:首页 > JavaScript

js实现数组扁平化输出

2026-03-02 01:39:49JavaScript

数组扁平化的概念

数组扁平化是指将多维数组转换为一维数组的过程。例如,将 [1, [2, [3, 4]], 5] 转换为 [1, 2, 3, 4, 5]

使用递归实现

递归方法可以处理任意深度的嵌套数组。通过遍历数组的每个元素,如果元素是数组则递归调用扁平化函数,否则将元素添加到结果数组中。

js实现数组扁平化输出

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

const nestedArray = [1, [2, [3, 4]], 5];
console.log(flattenDeep(nestedArray)); // [1, 2, 3, 4, 5]

使用 Array.prototype.flat()

ES2019 引入了 flat() 方法,可以直接实现数组扁平化。通过指定深度参数(默认值为 1),可以控制扁平化的层级。

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

使用 reduceconcat

结合 reduceconcat 方法,可以手动实现一层扁平化。如果需要多层扁平化,可以结合递归。

js实现数组扁平化输出

function flatten(arr) {
  return arr.reduce((acc, val) => acc.concat(val), []);
}

const nestedArray = [1, [2, 3], 4];
console.log(flatten(nestedArray)); // [1, 2, 3, 4]

使用扩展运算符

扩展运算符可以展开一层数组,适合浅层扁平化场景。

const nestedArray = [1, [2, 3], 4];
const flattened = [].concat(...nestedArray);
console.log(flattened); // [1, 2, 3, 4]

使用 toString 方法

如果数组元素均为数字或字符串,可以通过 toString 方法将数组转换为字符串,再分割为数组。这种方法仅适用于特定数据类型。

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

性能比较

  • flat(Infinity) 是性能最优的方案,但需支持 ES2019。
  • 递归方法通用性强,但可能因调用栈过深导致性能问题。
  • 扩展运算符和 reduce 适合浅层扁平化。

根据实际需求选择合适的方法,优先考虑代码可读性和运行环境兼容性。

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

相关文章

vue实现数组置顶操作

vue实现数组置顶操作

实现数组置顶的方法 在Vue中实现数组置顶操作,可以通过多种方式完成。以下是几种常见的实现方法: 使用数组的splice和unshift方法 // 假设有一个数组items const index…

vue实现添加数组

vue实现添加数组

Vue 实现添加数组的方法 在 Vue 中,可以通过多种方式实现向数组添加元素。以下是几种常见的方法: 使用 push 方法 通过 Vue 的响应式系统,直接调用数组的 push 方法添加元素:…

react如何给数组添加值

react如何给数组添加值

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

react如何合并两个数组

react如何合并两个数组

合并两个数组的方法 在React中合并两个数组可以使用多种方法,以下是一些常见的方式: 使用扩展运算符(Spread Operator) const array1 = [1, 2, 3]; con…

react实现数组过滤

react实现数组过滤

数组过滤的基本方法 在React中实现数组过滤通常使用filter方法,结合状态管理(如useState)动态更新过滤结果。以下是一个基础示例: import React, { useState }…

js实现筛选数组

js实现筛选数组

筛选数组的方法 在JavaScript中,筛选数组可以通过多种方式实现,以下是一些常见的方法: 使用Array.prototype.filter()方法filter()方法创建一个新数组,包含通过测…