关于js的一些算法题

1、实现深度克隆

function deepClone(obj ,c){
    let x= c || {};
    for(k in obj){
        if(typeof obj[k] === "Object"){
            x[k] = (obj[k].constructor ===Array)?[]:{};
            return deepClone(obj[k],x[k]);
        }else{
            x[k] = obj[k]
        }
    }
return x;
    }

//obj 被克隆的对象

2、随机打乱一个数组

function randoms(arr,newArr,iArr){
    if(newArr.length<arr.length){
        let emp = Math.floor(Math.random()*(arr.length));
        if(iArr.indexOf(emp)<0){
            iArr.push(emp);
            newArr.push(arr[emp]);
            return randoms(arr,newArr,iArr);
        }else{
            return randoms(arr,newArr,iArr);
        }
    }else{
        return newArr;
    }
}

//arr 要打乱的数组 ,返回新的数组newArr ,iArr初始化为空

 

3、一个未知长度的二维数组,从数组元素里面取一个元素,和其他子数组里面的元素从新组合生成一个新的二位数组

Arr=[]    
obj = new Array;
    arrs=obj.concat(list); //使arrs指向新的地址
for(var i=0;i<(list.length-1);i++){
    arrs.splice(0,1);
    arrs.forEach(v=>{
        v.forEach((k,n)=>{
            Arr.push([list[i][0],k]);
            Arr.push([list[i][1],k]);
        })
    })
}

//list 原始的二位数组

 

 

4、获取一个页面所用到的标签

function getTags(tags){
    let arrs=[];
    for(var i=0;i<tags.length;i++){
        if(arrs.indexOf(tags.item(i).tagName)<0){
            arrs.push(tags.item(i).tagName);//HTMLCollection.item()根据索引返回节点
        }
    }
  return arrs;
};

tags = document.getElementsByTagName('*');

getTags(tags );

 

5、实现calc(arg1,arg2,arg3)

calc(0)=>[];

clac(10)=>[0,1,2,3,4,5,6,7,8,9]

calc(1,10)=>[1,2,3,4,5,6,7,8,9]

calc(0,30,5)=>[0,5,10,15,20,25]

//--------------------

function calc(num_1,num_2,num_3){
    var arr=[];
    if(!!num_3){
        for(var i=num_1;i<num_2;i++){
            if(i%num_3==0){
                arr.push(i);
            }
        }
    }else{
        if(!num_2){
            for(var i=0;i<num_1;i++){
                arr.push(i);
            }
        }else{
            for(var i=num_1;i<num_2;i++){
                arr.push(i);
            }
        }

    }
return arr;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值