携程春招实习的最后三道编程题,照例总结一下javascript
第一道:字符串截取(涉及数组去重的知识点)html
给定一个长度小于 50 且包含字母和数字的任意字符串,要求按顺序取出当中的数字和英文字母,数字须要去重,从新排列后的字符串数字在前,字母在后。java
样例输入
'携程C2t0r1i8p2020校招'
样例输出:
'2018Ctrip'es6
个人思路:正则表达式
1.利用正则表达式的replace函数把字符串中的数字和英文字母取出来。编程
取出数字和英文字母能够有两种方法:数组
(1)利用正则表达式的replace函数数据结构
删除非数字的字符:str.replace(/\D/ig,"")
删除非英文字母的字符:str.replace(/[^A-Za-z]/ig,"")或者str.replace(/[^A-z]/ig,"")函数
(2)利用字符串的match方法ui
匹配字符串中所有的数字: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去重
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}
ES6中Array
新增了一个静态方法Array.from
,能够把相似数组的对象转换为数组,如经过querySelectAll
方法获得HTML DOM Node List
,以及ES6中新增的Set
和Map
等可遍历对象,如:
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);