js常用逻辑题

第一次发csdn,从事这个行业两年多了,也有很多同学也是这个行业,有一些也在大厂混的风生水起,自我认为,想要学好js这门语言,想要在js这条路上走得远,你的逻辑也是很重要的。下面的题是我自己稍微总结的,自己写了下。有一些解题思路也有点复杂。这里圈重点。如果有大神看到,请温柔点喷我。

 第一题

    将下划线风格的变量名转换成驼峰风格,如: 输入 alipay_first_quiz 返回 alipayFirstQuiz

    注:下划线只会出现在单词中间,不会出现在开头或者结尾

    function snake2camel(str) {
       if(str=='' || str == undefined || str == null || str == ''){
          return ''
       }else{
       let arr = str.split('');
          let a = []
       let arr1 = arr.map((el,ind) => {
         if(el === '_'){
           a.push(ind+1)
           return el = arr[ind+1].toUpperCase()
         }else{
           return el
         }
       })
       for(i=a.length-1;i>=0;i--){
          arr1.splice(a[i],1)
       }
       return arr1.join('')
       }
     }

第二题

将驼峰风格的变量名转换成下划线风格,如: 输入 alipayFirstQuiz 返回 alipay_first_quiz 


     function camel2snake(str) {
       if(str=='' || str == undefined || str == null || str == ''){
          return ''
       }else{
         let arr = str.split('');
         if(arr[0] == arr[0].toUpperCase()){
           arr[0] = arr[0].toLowerCase()
         }
         arr1 = arr.map(el => {
           if(el == el.toUpperCase()){
             return '_'+el.toLowerCase();
           }else{
             return el;
           }
         })
         return arr1.join('')
       }
     }

第三题

     给出一个数组和一个整数目标值 target,你需要找出 2 个数字,他们相加之和等于目标数字,并返回这两个数字的数组下标(升序排序)

     注:你可以假设给出的入参一定可以找出这样 2 个数字,并且是唯一解

     注:数组中同一个数字不能使用两遍

     例子:数组 [3,4,7,15] 目标 10,则 3 + 7 满足目标 10,返回他们的下标 [0, 2]


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

第四题

输入一个合法的 URL 返回它的 query string 解析结果

function parseQueryString(url) {
        todo
       if(url == undefined){
         return {}
       }else if(url.indexOf("?") == -1 || url.indexOf("?") == url.length -1){
       return {}
       }
       else if('&' === url[url.length -1]){
       let i = url.indexOf('?')
       let arr = url.slice(i+1).split('&')
       let arr1 = arr.pop()
       let obj = arr.reduce(function (obj, current) {
       let a= current.split('=');
       obj[a[0]] = a[1];
       return obj;
       }, {});

       return obj;
       }
       let i = url.indexOf('?')
       let arr = url.slice(i+1).split('&')
       let obj = arr.reduce(function (obj, current) {
       let a = current.split('=');
       if(a[1]==undefined){
         a[1]=''
       }
       a[1] = decodeURIComponent(a[1])
       obj[a[0]] = a[1];
       return obj;
       },{})
       return obj;
 }
//有点麻烦 不想改了 你们自行修改

第五题

     将一个 JSON Object 转换成 query string

     如:输入 { a:1, b:2 } 输出 a=1&b=2

     注意:需要考虑 URL 转义的情况,如中文或特殊字符

     function toQueryString(map) {
        todo
       if(map == undefined || Object.keys(map).length === 0){
         return ''
       }
       let str = ''
       for(let key in map){
         if(map[key]===undefined || map[key]===null){
           str += `${key}=&`;
         }else {
           map[key] = encodeURIComponent(map[key])
           str += `${key}=${map[key]}&`;
         }
       }
       return str.slice(0,-1)
     }

第六题

给定一个字符串,找到它的第一个不重复的字符,并返回它的索引,如果不存在,则返回-1

     s = "leetcode"  返回 0

     s = "loveleetcode"  返回 2

     function firstcode(s){
         for(let i=0;i<s.length;i++){
             if(s.lastIndexOf(s[i])==s.indexOf(s[i])){
                 let a = s.indexOf(s[i])
                 return a;
                 }
             }return -1;
         };

第七题

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 n/2 的元素。

     function mostNum(num) {
         let count = 0;
         let res = 0;
         for (i = 0; i < num.length; i++) {
           if (count == 0) {
             res = num[i];
           }
           if (num[i] == res) {
             count++;
           } else {
             count--;
           }
         }
         console.log(res);
         return res;
     };

第八题

实现 strStr() 函数。给定两个字符串 haystack 和 needle,

     请在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。

     ("hello", "ll");  2

     ("aaaaa", "bba");  -1

     ("", ""));  0

     function strStr(str,str1){
         if(str === ''){
             str1 = ''
         }
         let reg = new RegExp(`${str1}`,`g`)
         return str.search(reg);
     }

第九题

     编写一个函数 传入一个整数 输出整数的格式化结果

     例如:  输入 1234567  输出 1,234,567

            输入 12345678 输出 12,345,678

function format(num){
             if(typeof num !== "number"){
                 return '非数字'
             }else{
                 let arr = String(num).split('').reverse();
                 for(i=arr.length-1;i>=0;i--){
                     if(i%3===0){
                         arr1 = arr.splice(i,0,',')
                     }
                 }
                 if(arr[0]===','){
                     arr2 = arr.slice(1)
                 }
                 return arr2.reverse().join('')
             }
         }

第十题

编写一个函数 传入一个整数作为参数 判断该参数是否为质数 返回一个布尔值作为结果

     function isZs(num){
         let arr = []
         for(i=2;i<num;i++){
             arr.push(i)
         }
         console.log(arr)
         for(i=0;i<arr.length;i++){
             if(num%arr[i]===0){
                 return false;
             }else{
                 return true;
             }
         }
     }

第十一题

有效的字母异位词

     输入: s = "anagram", t = "nagaram"

     输出: true

     输入: s = "rat", t = "car"

     输出: false

 function abc(s,t){
         let s1 = s.split('')
         let t1 = t.split('')
         function sort(a,b){
             return a.charCodeAt() - b.charCodeAt()
         }
         s1.sort()
         console.log(s1)
         t1.sort()
         console.log(t1)
        return s1.sort().join('')===t1.sort().join('') ? true:false;
     }

十二题

     反转整数

     234 => 432

     -3456 => -6543

     120 => 21

    

     const rel  =  (x) => {

         let num = 0 ;
         let int = Math.abs(x);

         while(int!==0){
             num = (int%10) + (num*10);
             int = Math.floor(int/10);
         }
         if(x>0){
             return num;
         }
         return num*-1;
         }
         console.log(rel(-345))

     function num(num){
         if(typeof num !== 'number'){
             return '非数字'
         }else{
             let num1 = num>0?        String(num).split('').reverse().join(''):String(num).slice(1).split('').reverse().join('');
             let num2 = num>0?parseInt(num1,10):0-parseInt(num1,10)
             return num2
         }
     }

第十三题

     1-10

     1 2 3 4 5 6 7 8 9 10

     1 3 5 7 9

     1 5 9

     1 9

     问 1-100 循环删除偶数位 直到剩下2个数 除了1 另外一个是多少?

let arr = [];
     for(i=1;i<=100;i++){
         arr.push(i)
     }
     console.log(arr);

     while(arr.length>2){
         for(i=0;i<arr.length;i++){
            if(i%2){
                delete arr[i];
            }
         }
         for(j=0;j<arr.length;j++){
             if(arr[j]===undefined){
                 arr.splice(j,1)
             }
         }
     }

第十四题

编写一个函数 unique 实现数组去重

     function unique(arr){
         let arr1 = [];
         for(i=0;i<arr.length;i++){
         if(!arr1.includes(arr[i]))
             arr1.push(arr[i])
         }
         return arr1;
     }

第十五题

编写一个函数sort 对数组进行排序 返回一个对象包含 排序后的数组 最小值 最大值

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

第十六题

     回文判断

     编写一个函数 传入一个字符串判断传入的字符串是否是回文并返回一个布尔值

     'abcba'   true

     'abccba'   true

     '12321'    true

     'abbcc'    false

     '1234554321'   true

     '1233321'  true

     function isback(str){
         let arr = str.split('').reverse().join('')
         if(arr === str){
             return true
         }else{
             return false
         }
     }

第十七题

    字符串统计

     统计str中的 大写字母 小写字母 和 数字的数量

     var str = 'gf45k76dEW6Q5lU7YT76Inkl';
     function reduce(str){
         let arr = str.split('');
         arr1 = arr.reduce((obj,current)=>{
             let code = current.charCodeAt(0);
             if(code>48&&code<57){
                 obj.num++
             }else if(code>65&&code<90){
                 obj.A++
             }else if(code>97&&code<122){
                 obj.a++
             }
             return obj;
         },{A:0,a:0,num:0})
         return arr1
     }

第十八题

     将str1 处理成 'No Zuo No Die'

     function tiem(str){
         let arr = str.split(',');
         arr1 = arr.map(el=>{
             return el[0] = el[0].toUpperCase()+el.slice(1)
         })
         return arr1.join(',')
     }

第十九题

     字符串压缩

     var str3 = 'aaabcccccddeeefggh';   处理结果 -> '3a1b5c2d3e1f2g1h'

     function compress(str){
       let count=1;
       let result = ''
      for(let i = 0 ; i<str.length; i++){
       if(str[i] == str[i+1]){
           count++;
         }else{
           result += count+str[i];
           count = 1;
         }
       }

第二十题

给定一个字符串,找到它的第一个不重复的字符,斌返回它的索引,如果不存在,则返回-1

     s = "leetcode"  返回 0 
     s = "loveleetcode"  返回 2 
     function isStrErverse(str){
       for(i=0;i<str.length;i++){
           let arr = str.split('');
           arr.splice(i,1);
           let ind = arr.indexOf(str[i]);
           if(ind === -1) return i;
       }
     return -1;
     }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值