js常见的面试题算法

1.翻转字符串

function reser(str){
   return  [...str].reverse().join('')    
}

2.判断回文字符串

function  Mosl(str){
    let stri = ''
    for(let i= str.length; i>=0; i--){
      stri+= str.charAt(i)
    }
    return str === stri
 }

3.生成指定长度的字符串

function randomStr(n){
    let strr = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
    let str = ''
    for(let i=0; i<n; i++){
      str+= strr.charAt(Math.round(Math.random()* strr.length)) 
    }
    return str
}

4.数组去重

function deWeight(arr){
  return  [... new Set(arr)]
}

5.数组求最大值

function Max(arr){
  return Math.max(...arr)
}

6.冒泡排序

function bubbling(arr){
   for(let i=0; i<arr.length; i++){
     for(let j=0; j< arr.length - 1; j++){
       if(arr[j]> arr[j+1]){
         [ arr[j], arr[j+1]] = [ arr[j+1], arr[j]]
       }
     }
   }
   return arr
 }

7.数组排序,从小到大

function arrSort(arr){
   arr.sort((a,b)=> a-b)
   return arr
 }

8.浅复制

function copy(arr){
    let newObj = arr instanceof Array ? [] : {}
    for(let i in arr){
      newObj[i] = arr[i]
    }
    return newObj
  }

9.深复制

function deepCopy(arr){
    let newObj = arr instanceof Array ? [] : {}
    for(let i in arr){
      if( typeof arr[i] == 'object'){
        deepCopy(arr[i])
      }else{
        newObj[i] = arr[i]
      }
    }
  }
  //借助JSON实现深复制,但是它不能复制对象里面的方法
  function copy(arr){
    return JSON.parse(JSON.stringify(arr))
  }

10.删除重复的字符

function delStr(str){
   return [...new Set([...str])].join('')
}

11.两个相邻相同的字符串抵消

function tongDel(str){
   let arr = [...str]
   for(let i=0; i<arr.length; i++){
     for(let j=0; j<arr.length - 1; j++){
       if(arr[j] === arr[j+1]){
         arr.splice(j,2)
       }
     }
   }
   return arr.join('')
 }

12.删除相邻相同的字符串

function delStr(str){
   let arr = [] , newStr 
   for(let i=0; i<str.length; i++){
     if(str.charAt(i) !== newStr){
       arr.push(str[i])
       newStr = str[i]
     }
   }
   return arr.join('')
 }

13写个方法 两个数字变量相互交互值,不借助第三个变量

//方法一
 function swop(num1,num2){
     // 解构赋值
     [num1,num2] = [num2, num1]
     return {
       num1,
       num2
     }
   }
  //方法二
 function newSwop(num1,num2){
 //借助数组
   num2 = [num1, num1 = num2][0]
   return {
     num1,
     num2
   }
 }

14.统计字符串中次数最多的字母

function statistics(str){
   let arr = [...str]
   let obj = {} , num = 0 , max = 0
   for(let j=0; j<arr.length;j++){
     if(obj[arr[j]]){
       obj[arr[j]]++
     }else{
       obj[arr[j]] = 1
     }
   }
   //获取字母出现最多的次数
   num = Math.max(... Object.values(obj))
   //根据字母出现最多的次数,找到那个字母
   Object.keys(obj).find( (k)=>{
    if(obj[k] === num){
      max = k
    }
   })
   return max
}

15判断回文字符串,只考虑字母和数字字符,可以忽略字母的大小写,忽略特殊字符

isPalindrome(s) {
  let stri = ''
  let str = s
  for(let i= str.length; i>=0; i--){
    stri+= str.charAt(i)
  }
  str = (str.toLocaleLowerCase().replace(/[-~!@#$%^&*()/\|,.<>?"'();:`_+=\[\]{}]/g,"").replace(/\s/g, ""))
  stri = (stri.toLocaleLowerCase().replace(/[-~!@#$%^&*()/\|,.<>?"'();:`_+=\[\]{}]/g,"").replace(/\s/g, ""))
      return str === stri
};

16判断给定的数是否为丑数,丑数是只包含质因数 2, 3, 5 的正整数

judge(num){
	if(num <= 0){
      return false
    }
    while( num % 2 === 0){
      num /=2
    }
    while(num %3 ===0){
      num /=3
    }
    while(num %5 === 0){
      num /=5
    }
    return num == 1
}

最后说明:这只是本人自己的一些使用,有不足的地方,欢迎大家前来指正

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值