2018携程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('')

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

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

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

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

var newarr = [arr[0]];for(var i=1;i

newarr.push(arr[i]);

}

}

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

functionunique(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

if(!obj[arr[i]]){

obj[arr[i]] = 1; newarr.push(arr[i]); } }

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

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

functiontest(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

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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值