zoukankan      html  css  js  c++  java
  • 携程2018春招实习前端开发笔试题分享

    携程春招实习的最后三道编程题,照例总结一下

    第一道:字符串截取(涉及数组去重的知识点)

    给定一个长度小于 50 且包含字母和数字的任意字符串,要求按顺序取出当中的数字和英文字母,数字需要去重,重新排列后的字符串数字在前,字母在后。

    样例输入
    '携程C2t0r1i8p2020校招'
    样例输出:
    '2018Ctrip'


    我的思路:

    1.利用正则表达式的replace函数把字符串中的数字和英文字母取出来。

    取出数字和英文字母可以有两种方法:

    (1)利用正则表达式的replace函数

             删除非数字的字符:str.replace(/D/ig,"")
             删除非英文字母的字符:str.replace(/[^A-Za-z]/ig,"")或者str.replace(/[^A-z]/ig,"")

    (2)利用字符串的match方法

              匹配字符串中全部的数字:str.match(/d/g).join('')

              匹配字符串中全部的英文字母:str.match(/[A-Za-z]/g).join('')或者str.match(/[A-z]/g).join('')

              注:str.match(regex)和regex.exec(str)都是返回数组,具体对比解析可以参考这篇文章:http://www.cnblogs.com/gagarinwjj/archive/2014/05/22/match_exec.html

    2.数字字符串去重,可转化为数组再去重

    其中数组去重的方法这里总结一下:

    (1)如果是基本类型去重,可以

                ①创建新数组,然后利用indexof属性循环遍历

    var newarr = [arr[0]];
    for(var i=1;i<arr.length;i++){
        if(newarr.indexOf(arr[i]) == -1){
             newarr.push(arr[i]);
        }
    }

                ②利用数组的filter方法,将所有在过滤函数中返回ture的数组元素放进一个新数组中并返回(该方法不会改变原数组的值)

    function unique(arr) {
       return arr.filter(function(ele,index) {
           return arr.indexOf(ele) === index;
       });
    }

                ③利用es6的新特性set去重

    1. ES6中新增了Set数据结构,类似于数组,但是 它的成员都是唯一的 ,其构造函数可以接受一个数组作为参数,如:

       let array = [1, 1, 1, 1, 2, 3, 4, 4, 5, 3];
       let set = new Set(array);
       console.log(set);
       // => Set {1, 2, 3, 4, 5}
      
    2. ES6中Array新增了一个静态方法Array.from,可以把类似数组的对象转换为数组,如通过querySelectAll方法得到HTML DOM Node List,以及ES6中新增的SetMap等可遍历对象,如:

       let set = new Set();
       set.add(1).add(2).add(3);
       let array = Array.from(set);
       console.log(array);
       // => [1, 2, 3]
      

             于是,现在我们可以用一行代码实现数组去重了:

    var newarr = Array.from(new Set(arr));

    (2)如果是基本+复杂类型去重

               ④利用对象的属性去重。每次取出原数组的元素,然后再对象中访问这个属性,如果存在就说明重复

    var obj = {};
    var newarr = [];
    for(var i=0;i<arr.length;i++){
        if(!obj[arr[i]]){
            obj[arr[i]] = 1;
            newarr.push(arr[i]);
        }
    }

    3.最后把数字字符串和英文字母字符串拼接一下

    综上,第一道题的实现代码如下:

    function test(str) {
    // var num = str.replace(/D/ig,"");   //num 输出为20182020
    var num = str.match(/d/g).join(''); 
    console.log(num);
    var arr = num.split('');
    var newarr = [arr[0]];
    for(var i=1;i<arr.length;i++){
        if(newarr.indexOf(arr[i]) == -1){
             newarr.push(arr[i]);
        }
    }
    var newnum = newarr.join("");
    // var words = str.replace(/[^A-Za-z]/ig,"");   //Ctrip
    var words = str.match(/[A-Za-z]/g).join(''); 
    console.log(words);
    return newnum+words;
    }
    var res = test('携程C2t0r1i8p2020校招');
    console.log(res);
  • 相关阅读:
    LINUX系统运行查看
    MySQL数据库中tinyint类型字段读取数据为true和false (MySQL的boolean和tinyint(1))
    mysql DATE_FORMAT 年月日时分秒格式化
    fastJson泛型如何转换
    查找java程序进程快速指令jps
    vim快捷键
    mysql全库搜索指定字符串
    mysql一次性删除所有表而不删除数据库
    一键安装Docker图形化管理界面-Shipyard
    hadoop性能测试
  • 原文地址:https://www.cnblogs.com/zhenguoli/p/8797861.html
Copyright © 2011-2022 走看看