今日无事,勾栏听曲!

一、全排列

要求:以数组的方式返回字符串参数的所有排列组合

注意:1.字符串中的参数无重复且全部为小写

           2.返回的排列组合数组不区分顺序

难点:递归

const _permute=(string)=>{
    let result=[];
    let map=new Map();
    let dfs=(path)=>{
        if(path.length==string.length){
            result.push(path)
            return
        }
        for(let i=0;i<string.length;i++){
            if(map.get(string[i])) continue
            map.set(string[i],true)
            path+=string[i]
            dfs(path)
            map.set(string[i],false)
            path=path.substring(0,path.length-1)
        }
    }
    dfs('')
    return result
}
console.log(_permute('abc'))//[ 'abc', 'acb', 'bac', 'bca', 'cab', 'cba' ]

二、instanceof

  • 如果 target 为基本数据类型直接返回 false

  • 判断 Fn.prototype 是否在 target 的隐式原型链上

  • 难点:原型链及原型对象

  • const _instanceof=(target,Fn)=>{
        //先判断是否为基础数据类型
        if(target===null||(typeof(target)!=='object' && typeof(target)!=='function')){
            return false
        }
        //判断Fn的原型对象在不在terget的原型链上 在target的原型链上一级一级往上找         
        //target.__proto__...__proto__ 直到找到null 如果中间有相等的值证明在 否则不在 
        let proto=target.__proto__
        while(true){
            if(proto===null) return false
            if(proto===Fn.prototype) return true
            proto=proto.__proto__
        }
    }
    function A(){}
    const a=new A()
    console.log(_instanceof(a,A))//true
    console.log(_instanceof(1,A))//false


    三、Array.prototype.map

  • map 中的 exc 接受三个参数,分别是: 元素值、元素下标和原数组

  • map 返回的是一个新的数组,地址不一样

  • //不能用箭头函数 会改变this的指向
    //以函数作为形参 在函数内部调用
    //实例方法挂载在Array的原型对象上(Array.prototype)
    //map=>映射  不改变原数组
    Array.prototype._map=function(exc){
        const result=[]
        let index=null
        let item=null
        let array=this //实例方法中this指向调用实例方法的变量
        for(let i=0;i<array.length;i++){
            index=i
            item=array[i]
            result.push(exc(item,index,array))
        }
        return result
    }
    const arr1=[1,2,3]
    console.log(arr1._map(item=>item*2)) //[2,4,6]

    四、Array.prototype.filter

  • filter 中的 exc 接受三个参数,与map一致,主要实现的是数组的过滤功能,会根据 exc 函数的返回值来判断是否“留下”该值。

  • filter 返回的是一个新的数组,地址不一致。

  • Array.prototype._filter=function(exc){
        const result=[];
        let index=null;
        let item=null;
        let array=this;
        for (let i=0;i<array.length;i++) {
            index=i;
            item=array[i]
            if(exc(item,index,array)) result.push(item)
        }
        return result
    }
    let arr=[1,2,3,4]
    console.log(arr._filter(item=>item%2==0))//[ 2, 4 ]

    五、Array.prototype.reduce

  • reduce 接受两个参数,第一个为 exc 函数,第二个为初始值,如果不传默认为 0

  • reduce 最终会返回一个值,当然不一定是 Number 类型的,取决于你是怎么计算的,每次的计算结果都会作为下次 exc 中的第一个参数

  • Array.prototype._reduce=function(exc,init=0){
        let prev=init
        let cur=null;
        let index=null;
        let array=this;
        for(let i=0;i<array.length;i++){
            cur=array[i];
            index=i;
            prev=exc(prev,cur,index,array)
        }
        return prev
    }
    let arr=[1,2,3,4,5]
    console.log(arr._reduce((prev,cur)=>prev*cur,1))//120

    六、Object.create

  •  Object.create() 方法用于创建一个新对象,使用现有的对象来作为新创建对象的原型(prototype)
  • Object._create=function(proto){
        const Fn=function(){}
        Fn.prototype=proto
        return new Fn()
    }
    function A(){}
    let obj1=Object.create(A)
    let obj2=Object._create(A)
    console.log(obj1.__proto__===A)//true
    console.log(obj2.__proto__===A)//true

    七、浅拷贝

  • const _shallowClone=(target)=>{
        if(typeof targer ==='object'&& target == null) {
            return target
        }else{
          const constructor=target.constructor  //constructor
        if(/^(RegExp|Function|Date|Map|Set)$/i.test(constructor.name)) return target
        const result = Array.isArray(target) ? [] : {}
        for (var key in target) {
            result[key]=target[key]
        }
        return result  
        }
        
    }
    
    const val={ a:0,b:1}
    console.log(_shallowClone(val))//{ a: 0, b: 1 }

    八、深拷贝

  •     if(typeof targer !=='object'|| target == null) {
            return target
        }else{
            const constructor=target.constructor  //constructor
            if(/^(RegExp|Function|Date|Map|Set)$/i.test(constructor.name)) return new constructor(target)
            if (map.get(target)) return map.get(target)
            map.set(target,true)
            const result = Array.isArray(target) ? [] : {}
            for (var key in target) {
                if(target.hasOwnProperty(key)){
                    result=_deepClone(target[key],map)
                }
            }
            return result  
        }
        
    }
    
    const val={ a:{c:2},b:[1,2,3]}
    console.log(_deepClone(val))//{ a: { c: 2 }, b: [ 1, 2, 3 ] }

    就先到这吧,快看不懂了...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当以太网出现无网络访问权限的情况时,这可能是由于IP地址的问题导致的。IP地址从192.xxx.xxx.xxx变成了169.xxx.xxx.xxx,这表明网络连接出现了问题。为了解决这个问题,你可以按照以下步骤进行操作: 1. 首先,点击开始菜单,然后选择设置。 2. 在设置中,找到并点击以太网选项。 3. 在以太网设置界面中,双击以太网,然后点击属性。 4. 在属性窗口中,找到并点击配置。 5. 在配置中,找到并点击高级选项。 6. 在高级选项中,确保Flow Control选项是Rx&Tx Enabled。 7. 返回以太网属性页面,双击Internet 协议版本 4 (TCP/IPv4)。 8. 在弹出的窗口中,选择自动获得IP地址,然后点击确定。 9. 回到以太网界面,右键点击以太网,禁用后再启用。 10. 重复步骤 7,然后选择自动获得IP地址。 11. 这样就完成了解决以太网无网络访问权限的步骤。网络应该恢复正常连接,显示为网络2。 另外,有一种情况是当电脑刚开始时没有检测到网线连接时,需要在IP协议版本 4 (TCP/IPv4)中打上勾并确定,有些电脑可能还需要重启才能正常连接。此外,当连接成功后,Windows 10系统可能会弹出一个对话框,询问是否将此网络设置为信任网络等。 通过以上步骤,你应该能够解决以太网无网络访问权限的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [解决以太网IPv4无网络访问权限](https://blog.csdn.net/weixin_39161727/article/details/104890904)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [插入网线后以太网显示ip4连接无网络访问权限](https://blog.csdn.net/qq_45341386/article/details/124298041)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值