携程前端一面
五道题目
1.比较经典的
复制代码
for(let i=0;i<10;i++){
setTimeout(function(){
console.log(i)
},1000)
}
如何输出0 1 2 3...答的let,闭包,第三个参数
问为什么let可以输出这个,答的作用域,面试官让详细解释,我不知道是要怎么样详细解释
2.引用类型考察
复制代码
let a={m:10,n:30}
let b=a;
let c=b;
b.m=20;
let d={...b}
c={n:40}
console.log(a.m) //20
console.log(a===b) //true
console.log(a===c) //false
console.log(b===d) //false(...运算符第一层深拷贝,如果某项还是引用类型会互相影响)
console.log(b===c) //false
3. 千分位补充逗号,且保留两位小数
复制代码
let str='1234567'
function convertMoney(str){
let strarr=str.split('.');
let first=strarr[0];
let second=strarr[1] || '00';
let idx=0;
let res=[]
for(let i=first.length-1;i>=0;i--){
idx++;
res.unshift(first[i])
if(idx %3==0){
res.unshift(',')
}
console.log(res)
}
let results=res.join('')+'.'+ second;
return results
}
console.log(convertMoney(str))
也可以用正则,网上的答案
复制代码
let str='1234567'
function convertMoney(str){
let reg=/\d{1,3}(?=(\d{3})+$)/g;
let newarr=str.replace(reg,'$&,')
return newarr
}
console.log(convertMoney(str))
4.按照index排序
当时没有写出来。。怒摔小饼干!!
复制代码
let arr=[
{value:'北京',index:'beijing'},
{value:'上海',index:'shanghai'},
{value:'北海道',index:'beihaidao'},
{value:'日本',index:'ribeng'}
]
let newarr=arr.sort(function(a,b){
return justify(a.index,b.index)
})
function justify(before,after){
if(before.length>=1 && after.length>=1){
if(before[0].charCodeAt() return -1 }else if(before[0].charCodeAt()>after[0].charCodeAt()){ return 1 }else{ justify(before.slice(1),after.slice(1)) } }else if(before.length>=1 && after.length<1){ return -1 }else if(before.length<1 && after.length>=1){ return 1 }else{ return 0 } } console.log(JSON.stringify(newarr)) 5.把数字提取出来 平时做正则容易出错,比较怂还是用charCodeAt()了 复制代码 let str='ahbc345lkiol876kkk67'; let res=[]; let temp=[]; for(let i=0;i if(str[i].charCodeAt()>='0'.charCodeAt() && str[i].charCodeAt()<='9'.charCodeAt() ){ temp.push(str[i]) }else{ res.push(temp) temp=[] } } res.push(temp) console.log(res.filter(item=>item!=0)) 可以用正则 复制代码 let str='ahbc345lkiol876kkk67'; let reg=/\d+/g let newreg=str.match(reg) console.log(newreg) 不太会搞这些,有错的或者有更好的方法欢迎大家指出来我学习一下




