欢迎来到3672js教程,我们关注js教程、js框架、js代码特效等。

JavaScriptArray实例方法flat的实现,

3672Js.Com2024-04-11 02:28 来源:未知 阅读:5109 关注度4

JavaScriptArray实例方法flat的实现,


目录
  • Array.prototype.flat()
    • 语法
    • 参数
    • 返回值
    • 用法
    • 描述
    • 实现 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]
    

    结语

    到这里 Array 实例方法 flat 实现完成啦。

    到此这篇关于JavaScript Array实例方法flat的实现的文章就介绍到这了,更多相关JavaScript Array flat实现内容请搜索3672js教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持3672js教程!

    您可能感兴趣的文章:
    • JavaScript 映射器 array.flatMap()
    • JavaScript Array.flat()函数用法解析
    • JavaScript Array Flatten 与递归使用介绍
    • JavaScript中Array实例方法filter的实现原理
    • JavaScript中Array实例方法map的实现方法

    本站文章为3672js教程网友分享投稿,版权归原作者,欢迎任何形式的转载,但请务必注明出处。同时文章内容如有侵犯了您的权益,请联系我们处理。
    评论已被关闭