当前位置:首页 > JavaScript

js flat实现

2026-02-01 20:03:46JavaScript

数组扁平化的概念

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

js flat实现

使用 Array.prototype.flat()

ES2019 引入了 flat() 方法,可以方便地实现数组扁平化。该方法接受一个可选的参数 depth,表示要扁平化的深度,默认值为 1。

js flat实现

const arr = [1, [2, [3, [4]], 5]];

// 默认扁平化一层
console.log(arr.flat()); // [1, 2, [3, [4]], 5]

// 指定深度为 2
console.log(arr.flat(2)); // [1, 2, 3, [4], 5]

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

手动实现扁平化

如果需要在不支持 flat() 的环境中使用,可以手动实现扁平化功能。

递归实现

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

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

使用 while 循环和 concat

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

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

使用 reduceconcat

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

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

性能比较

  • flat() 方法是原生实现,性能最优。
  • 递归实现的性能通常优于 while 循环实现,但需要注意栈溢出问题。
  • reduceconcat 的实现简洁,但性能略低于递归实现。

注意事项

  • 扁平化操作可能会改变原始数组的结构,建议在必要时进行深拷贝。
  • 对于非常大的数组,递归实现可能会导致栈溢出,可以考虑使用迭代方法替代。

标签: jsflat
分享给朋友:

相关文章

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js如何实现继承

js如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的JWT令牌…