高阶JS面试题NINE

生成括号 n = 1 ()

思路:f(n) 的值永远都是 f(n-1) 的结果 里面每一项push ()

export function generateParenthesis(initn: number): string[] {
   
    const func = (n: number): string[] => {
   
        if (n == 1) {
   
            return ['()']
        }

        let res = func(n - 1)
        
        let pjRes = []
        for (let i = 0; i < res.length; i++) {
   
            let str = res[i]
            let sL = str.length
            for (let j = 0; j < sL; j++) {
   
                pjRes.push(`${
     str.slice(0, j)}()${
     str.slice(j, sL)}`)
            }
        }
        return pjRes
    }

    return Array.from(new Set(func(initn)))
}

console.log(generateParenthesis(3), 'na');

实现深拷贝包括 map set 类型

  1. map
  2. set
  3. 函数
  4. 循环引用
  5. 深层数据拷贝
export function cloneDeep(obj: any, map = new WeakMap()): any {
   
    if (typeof obj !== 'object' || obj == null) return obj

    // 避免循环引用
    const objFromMap = map.get(obj)
    if (objFromMap) return objFromMap

    let target: any = {
   }
    map.set(obj, target)

    // Map
    if (obj instanceof Map) {
   
        target = new Map()
        obj.forEach((v, k) => {
   
            const v1 = cloneDeep(v, map)
            const k1 = cloneDeep(k, map)
            target.set(k1, v1)
        })
    }

    // Set
    if (obj instanceof Set) {
   
        target = new Set()
        obj.forEach(v => {
   
            const v1 = cloneDeep(v, map)
            target.add(v1)
        })
    }

    // Array
    if (obj instanceof Array) {
   
        target = obj.map(item => cloneDeep(item, map))
    }

    // Object
    for (const key in obj) {
   
        const val = obj[key]
        const val1 = cloneDeep(val, map)
        target[key] = val1
    }

    return target
}

const a
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值