js基础算法

1.反转字符串

解法一、

思路:从坐标的最大值减减

function b(str){
  let res ='', //新建一个变量接受循环值
   for(let i=str.length-1;i>=0;i--){ //根据length的最大值向前递减做循环,res接收排列 
     res+=str[i]
}
  return res
}
//解法二
function b(str){
let arr =str.split(''); 
let i =0, j=str.length-1;
//    i+j=length-1  j=length-1-i  二者对应关系:对应的不是值,是length长度值
while(i<j){
[ arr[i],arr[j] ] =[ arr[j],arr[i] ];
//或者
//let temp =arr[i];
//arr[i]=arr[i];
//arr[j]=temp
i++;
j--;
}
return arr.join('');
}
//解法三、
function b(str){
return  str.split('').reverse().join('');
//reverse是数组方法,需要转数组  另字符串无法通过index转值

}
///解法四
function b(str){
  if(!str){   //str.length==0
     return '';    // 防止空字符
  } else if(str.length==1){
     return str; 
  }
    let  end = str[end] + b(str.slice(1,end)) + str[0]  //采用递归的思想
}

b("hello") 得到 //olleh

2.n的阶乘

解法一、for循环

//解法一
function a(res){
  if(res===0){
     return 1 
  }else if(
  let num = 1;
   for(let i = 2;i<= res ;i++){
     num*=i
   }
return num
)
}
//解法二、递归
function b(num){
  if(num===0){
     return 1
   }
  return num*b(num-1)
}

3.字符串中最长的单词

//解法一、
function b(str){
    let res = 0,tem=0
    for(let i=0;i<str.length;i++){
        if(str[i]===""){
            res = Math.max(res,temp);   //max 取二者最大值
            temp = 0;
        }else{
            temp++
        }
    }
return  Math.max(res,temp);
} 


//解法二、
function b(str){
    let res = 0,tem=0
    for(let i=0;i<str.length;i++){
        if(str[i]===""){
            if(temp>res){
                res=temp;
            }
            temp = 0;
        }else{
            temp++
        }
    }
return  res
} 


//解法三、
function b(str){
    let arr = str.split("");
    let res =0;
    for(let i = 0; i<arr.length;i++){
        res=Math.max(res,arr[i].length);
    }
    return res;
}
//解法四、
function b(str){
    return Math.max.apply(null,str.split("").map(e=>e.length));
    //es6 写法
    //return Math.max(...str.split("").map(e=>e.length));

}

4.数组扁平化找最大值

//解法一、
function b(arr){
    return arr.map(item=>Math.max(...item));
}
//解法二、reduce
function  b (arr){
   arr.reduce((accum,curr)=>{  // reduce方法可用作迭代累加运算
       Math.max(accum,cuur)   // accum 是上一次计算后-Infinity更新后的值
   }, -Infinity)              //cuur 是当前值
}
//解法三、双重for循环
//此解法是已知二层嵌套,如不知嵌套层数,可以加个判定重新走循环
function b(str){
    let result = []
    for(let i = 0;i<arr[i];i++){
        let max = -Infinit
        for(let j= 0;j<=arr[i].length;j++){
           max=Math.max(max,arr[i][j])
        }       
    result.push(max)
    }
    return result
}

b([[1,2,30],[2,3,5],[6,5,4]])   // 得到30

5.数组是否以某个值结尾

//解法一、循环判定
function b (str,target){
    if(str.length<tartget.length){
         return false
    }
     let  i = str.length-1,
     let  j = target.length-1;
     while(j>=0){
          if(str[i] !== target[j]){
           return  false;
          }
         i--;
         j--;
    } 
   return true
}
//解法二、slice方法
function b (str,target){
    if(str.length<tartget.length){
         return false
    } 
   return  str.slice(-target.length) === target;
}

6.斐波那契数列

function b(str){
       let num = [1,2]
       let len =num.length-1   //最后一个值
       for(let i= num[len];i<=str;i=num[len]+num[len-1]){
          num.push(num[len-1]+num[len])
          len++
       }
       return num
   }
    console.log(b(100))

7.重复字符串 

//方法一
function packeg(str,num){
    let res='';
    for(let i= 0;i<num;i++){
        res+=str
    }
}
//解法二
function packeg (str,num){
 if(num<=0){
     return '';
}
return Array(num+1).join("str")
}

8,切割字符串用...代替(css溢出打点)

//解法一
function packeg (str,num){
      if(str.length<num){
          return str
        }
   return str.slice(0,num)+"...";

}

9.查找第一个符合条件的元素

//解法一

function packeg (arr,func){
for(let i=0;i<arr.length;i++){
   if(func(arr[i])){
     return arr[i]
    }
}
return
}
//解法二
function packeg (arr,func){
return arr.filter(func)[0];  
}
//解法三
function packeg (arr,func){
 return arr.find(func)
}

10判断是否是布尔类型

function packeg (bool){
 return  typeof bool === "boolen";
}

11.字符串单词首字母大写

//解法一
function packeg (str){
 let flag= true;
 let res='';
 for(let i=0;i<str.length;i++){
    if(flag){
     res+str[i].toUpperCase();
     flag=false;    
 }lese{
     res+str[i].toLowerCase();
     if(str[i]===" "){
       flag=true
  }
 }
}
return res
}
//解法二
function packeg (str){
  return str.split(' ').map(item=>{
    item[0].toUpperCase()+item.slice(1).toLowerCase()
    }).join(' ');
}
//解法三
function packeg (str){
  return str.toLowerCase().replice(/(^|\s)[a-z]/g, match=>match.toUpperCase())
}

12.数组插入数据

function packeg (arr1,arr2,n){
    let copy=arr2.slice();
    copy.splice(n,0,...arr1);
    return copy;
}

13.数组去重

//解法一
function str(arr){
let newArr=[]
  for(var i=0;i<arr.length;i++){
    if(newArr.indexOf(arr[i])==-1){
      newArr.push(arr[i])
    }
  }
    console.log(newArr)
    }
}
//解法二
function unique(arr){
  var res = [arr[0]];
  for(var i=1;i<arr.length;i++){
    var repeat = false;
    for(var j=0;j<res.length;j++){
      if(arr[i] == res[j]){
        repeat = true;
        break;
      }
    }
    if(!repeat){
      res.push(arr[i]);
    }
  }
  return res;
}
//解法三
function unique(arr){
  var arr2 = arr.sort();
  var res = [arr2[0]];
  for(var i=1;i<arr2.length;i++){
    if(arr2[i] !== res[res.length-1]){
      res.push(arr2[i]);
    }
  }
  return res;
}
function unique(arr){
  var res =[];
  var json = {};
  for(var i=0;i<arr.length;i++){
    if(!json[arr[i]]){
      res.push(arr[i]);
      json[arr[i]] = 1;
    }
  }
  return res;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值