JavaScript Array实例方法flat的实现
Array.prototype.flat()
flat() 方法用于将一个嵌套多层的数组进行扁平,返回新数组。它不会改变原始数组。 flat 方法在处理多维数组时非常有用,它可以让数组操作变得更加灵活和简洁。
语法
flat() flat(depth)
参数
depth(可选):指定要扁平的深度,默认值为 1。
返回值
一个新的数组,其中包含扁平完的数组元素。
用法
const arr = [0, 1, 2, [3, 4]] arr.flat() // [0, 1, 2, 3, 4]
描述
flat() 方法会忽略稀疏数组中的空槽
。
flat() 方法是个浅拷贝方法
,它不会改变原数组。
它只需要 this
值具有 length
属性和整数键属性即可。但是,如果要展开元素,则它们必须是数组
。
实现 flat 方法
从上面 flat 描述总结实现 flat 时注意实现这三点。
- 需要一个参数,默认值为 1。
- flat 会忽略稀疏数组中的空槽。
- 展开的元素必须是数组。
Array.prototype.myFlat = function (depth = 1) { // 需要一个参数,默认值为 1 const result = [] const flatten = (arr, currentDepth) => { for (let i = 0; i < arr.length; i++) { if (Object.hasOwn(arr, i)) { // 忽略稀疏数组的空槽 if (Array.isArray(arr[i]) && currentDepth < depth) { // 展开的元素必须是数组 flatten(arr[i], ++currentDepth) } else { result.push(arr[i]) } } } } flatten(this, 0) return result }
测试用例
Array.prototype.myFlat = function (depth = 1) { const result = [] const flatten = (arr, currentDepth) => { for (let i = 0; i < arr.length; i++) { if (Object.hasOwn(arr, i)) { if (Array.isArray(arr[i]) && currentDepth < depth) { flatten(arr[i], ++currentDepth) } else { result.push(arr[i]) } } } } flatten(this, 0) return result } console.log('扁平普通数组') const arr1 = [1, 2, [3, 4]] console.log(arr1.myFlat()) console.log(arr1.flat()) // [1, 2, 3, 4] const arr2 = [1, 2, [3, 4, [5, 6]]] console.log(arr2.myFlat()) console.log(arr2.flat()) // [1, 2, 3, 4, [5, 6]] const arr3 = [1, 2, [3, 4, [5, 6]]] console.log(arr3.myFlat(2)) console.log(arr3.flat(2)) // [1, 2, 3, 4, 5, 6] const arr4 = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]] console.log(arr4.myFlat(Infinity)) console.log(arr4.flat(Infinity)) // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] console.log('稀疏数组中使用 flat') const arr5 = [1, 2, , 4, 5] console.log(arr5.myFlat()) console.log(arr5.flat()) // [1, 2, 4, 5] const arr6 = [1, , 3, ["a", , "c"]] console.log(arr6.myFlat()) console.log(arr6.flat()) // [ 1, 3, "a", "c" ] const arr7 = [1, , 3, ["a", , ["d", , "e"]]] console.log(arr7.myFlat()) console.log(arr7.flat()) // [ 1, 3, "a", ["d", empty, "e"] ] console.log(arr7.myFlat(2)) console.log(arr7.flat(2)) // [ 1, 3, "a", "d", "e"] console.log('在非数组对象上使用 flat') const arrayLike = { length: 3, 0: [1, 2], 1: { length: 2, 0: 3, 1: 4 }, 2: 5, } console.log(Array.prototype.myFlat.call(arrayLike)) console.log(Array.prototype.flat.call(arrayLike)) // [1, 2, { "0": 3, "1": 4, "length": 2 }, 5]
栏 目:JavaScript
下一篇:手把手教会你用Javascript实现放大镜效果(详细注释+完整代码)
本文标题:JavaScript Array实例方法flat的实现
本文地址:https://fushidao.cc/wangluobiancheng/240.html
您可能感兴趣的文章
- 02-11js中基本事件的总结(onclick、onblur、onchange等)
- 02-11详解如何在Node.js中使用中间件处理请求
- 02-11Vue3中Provide和Inject的用法及工作原理详解
- 02-11Vue+vant实现图片上传添加水印
- 02-11快速解决 keep-alive 缓存组件中定时器干扰问题
- 02-11uniapp 使用 tree.js 解决模型加载不出来的问题及解决方法
- 02-11基于uniapp vue3 的滑动抢单组件实例代码
- 02-10JavaScript 中的 Map使用指南
- 02-10vue3中使用print-js组件实现打印操作步骤
- 02-10Vue 中v-model的完整用法及v-model的实现原理解析


阅读排行
推荐教程
- 04-23JavaScript Array实例方法flat的实现
- 04-23THREE.JS使用TransformControls对模型拖拽的代码实例
- 04-23Vue3使用v-if指令进行条件渲染的实例代码
- 04-23vue3+ts项目搭建的实现示例
- 04-23JavaScript实现下载超大文件的方法详解
- 04-23vue如何使用pdf.js实现在线查看pdf文件功能
- 04-23vue.js调用python脚本并给脚本传数据
- 12-18使用JavaScript遍历输出页面中的所有元素的方法详解
- 04-23JS加密解密之保存到桌面书签
- 12-18Vue实现滚动加载更多效果的示例代码