当前位置:首页 > 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]

递归实现

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

js实现flat

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

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

js实现flat

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 方法(仅适用于数字或字符串数组)

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

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中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似: func…

节流js实现

节流js实现

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

js实现图片

js实现图片

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

js实现滚动

js实现滚动

实现滚动效果的方法 在JavaScript中实现滚动效果可以通过多种方式完成,以下是一些常见的方法: 使用window.scrollTo() window.scrollTo()方法可以将页面滚动到指…

js实现复制功能实现

js实现复制功能实现

使用document.execCommand方法(传统方式,已逐渐被弃用) 传统方式通过document.execCommand('copy')实现复制功能,需先选中文本。以下是一个完整示例: fu…

用js实现vue

用js实现vue

用 JavaScript 实现 Vue 核心功能 Vue.js 是一个渐进式框架,其核心功能包括响应式数据绑定、虚拟 DOM 和组件系统。以下是一个简化版的实现,展示如何用原生 JavaScript…