当前位置:首页 > JavaScript

js实现flat

2026-02-02 08:13:02JavaScript

实现数组扁平化的方法

数组扁平化是指将嵌套的多维数组转换为一维数组。JavaScript 提供了多种实现方式,以下是常见的几种方法:

使用 Array.prototype.flat()

ES2019 引入了 flat() 方法,可以直接将数组扁平化。默认只扁平化一层,可以通过参数指定深度。

const arr = [1, [2, [3, [4]]]];
const flattened = arr.flat(Infinity); // 使用 Infinity 完全扁平化
console.log(flattened); // [1, 2, 3, 4]

递归实现

通过递归遍历数组的每个元素,如果是数组则继续递归,否则将元素加入结果数组。

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

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

使用 reduce 实现

利用 reduce 方法遍历数组,递归处理嵌套数组。

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

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

使用 while 循环和 concat

通过循环判断数组中是否还有嵌套数组,不断展开。

function flatten(arr) {
  while (arr.some(item => Array.isArray(item))) {
    arr = [].concat(...arr);
  }
  return arr;
}

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

使用 Generator 实现

通过生成器函数递归遍历数组,生成扁平化后的序列。

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

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

使用 toString 方法(仅适用于数字或字符串数组)

将数组转换为字符串后再解析,仅适用于元素为数字或字符串的情况。

js实现flat

function flatten(arr) {
  return arr.toString().split(',').map(Number);
}

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

注意事项

  • 如果数组包含非数组对象(如 null{}),需要额外处理。
  • 递归方法可能导致栈溢出,对于极深层级的数组需谨慎使用。
  • flat() 是 ES2019 新增方法,需考虑兼容性问题。

标签: jsflat
分享给朋友:

相关文章

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 // 获取所有…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: fun…

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…