携程2018秋招笔试题解(前端)
虽然携程的题很坑,但是题解还是要写的,总结反思吧
第一题:
参考代码:
let str="携程C2t0r1i8p2020校招"; let nums=str.match(/\d/g); let chars=str.match(/[A-Za-z]/g); nums=[...new Set(nums)]; let s=""; nums.forEach(e=>s+=e); chars.forEach(e=>s+=e); console.log(s);
第二题:
参考代码:(仅供参考,不一定能AC)
let str=[null, 2, "test", undefined, { "type": "product", "content": "product1" }, { "type": "product", "content": "product2" }, { "type": "tag", "content": "tag1" }, { "type": "product", "content": "product3" }, { "type": "tag", "content": "tag2" }]; function groupList(list) { if (Object.prototype.toString.call(list) !== '[object Array]') return []; for(let i=list.length-1;i>=0;i--){ if(list[i]==null||typeof list[i]!="object"){ list.splice(i,1); } } let types=[]; for(let i=list.length-1;i>=0;i--){ types.push(list[i].type); } types=[...new Set(types)] let product=[],tag=[],res=[]; for(let j=0;j<types.length;j++){ let newType=[]; for(let i=list.length-1;i>=0;i--){ if(list[i].type==types[j]){ newType.unshift(list[i].content); } } res.push(newType); } let res2=[]; for(let j=types.length-1;j>=0;j--){ let tmp={type:types[j],content:res[j]} res2.push(tmp); } return res2; } var data =str; var result = groupList(data); console.log(JSON.stringify(result));
第三题:
实现类似迭代方法中的map()方法
参考代码:
function map(data, fn) { let res; if (Object.prototype.toString.call(data) === '[object Array]') { res = [] data.forEach(function (v, i, arr) { res.push(fn(v, i, arr)); }) return res; } else if (Object.prototype.toString.call(data) === '[object Object]') { res = {}; for (let key in data) { res[key] = fn(data[key], key, data); } return res; } return null; }
继续加油吧。。。。