JS重复数据删除和字符串奇数小写到大写的详细说明
在面试中,我们经常会得到数组的重复消除。作为一个合格的前端开发人员,不知道是否应该采用几种去重方法。别瞎说,打开就行了.
一、indexOf()方法
实现思路:使用indexOf()方法判断新数组中是否有这个值,如果没有,则将这个值推送到数组中
//首先定义一个数组vararr=[,'','',];函数remov(array){ var arr=[];for (var i=,len=array.length伊琳;I){ if(arr . indexof(array[I])==-){ arr . push(array[I])} }返回arr} console . log(remov(arr));//[,'','',]代码非常简单,说明indexOf()是ES5中的一个方法,与IE8不兼容,所以在使用之前要考虑兼容性。
其次,sort()确定相邻的两个数字
实现思路:首先利用数组的sort()方法对数组进行升序排序,然后判断相邻两个数是否相等,如果不相等,则将前一个数推送到新创建的数组中
var arr=[,'','',];函数remov(array){ var LinaRR=[];array . sort();for (var i=,len=array.length我透镜;i ) { if (array[i ]!==array[I]){ linar . push(array[I])} }返回linArr} console . log(remov(arr));//['',' ',]第三,创建一个空对象和一个空数组
实现思路:在for循环中,判断对象中是否有当前项,如果没有,则将当前项推送到新创建的数组中,并将当前项作为对象的属性赋给1
var arr=[,'','',];函数remov(array){ var RES=[];var obj={ };对于(var I=;iarray.lengthi ){ if(!obj[array[I]]){ RES . push(array[I]);obj[array[I]]=;} }返回res} console . log(remov(arr));//[,'','',]至于为什么把当前项作为对象的一个属性赋给这里的1,比如数组中的5,第一次对象中没有5的属性,我们把它推送到新的数组中,如果没有赋5的属性,下一次检测到第二个5,就会推送到新的数组中。因此,当前项目作为对象的属性被分配给1,但它也可以被分配给其他值。有点啰嗦,懂的人可以跳过.
你有没有注意到第三种方法的字符串‘4’和值4在这里无法判断,所以有一点小缺点。
第四,这种方法和第三种方法借鉴了第三种方法
实现思路:在for循环中,判断对象中是否有当前项;如果不是,则将当前项作为对象的属性,赋为1;否则,当前项目。for循环完成后,使用中的遍历对象中的属性
var arr=[,'','',];函数remov(array){ var obj={ };var RES=[];对于(var I=;iarray.lengthi ){ if(!obj[array[I]]){ obj[array[I]]=;} else { obj[array[I]];} } for(var k in obj){ RES . push(k);//B .这里,将遍历的对象属性推送到新创建的数组中。//console . log(k);//a .直接打印出遍历对象的属性}返回res//b .这里返回新创建的array } console . log(remov(arr));//B .在这里打印出remov(arr)函数的执行结果【】、“”、“”、“”、“”、“”、“”、“”、“”)//remov(arr);//a这个方法有一个小问题:如果标注中有a,则直接打印被遍历的对象属性,结果如下
注释中的b是将遍历对象的属性推送到新创建的数组中,打印出来的数组全是字符串。
五个,两个用于循环遍历
实现思路:这种方法要多用。创建一个空数组,将一个数组值保存到第一个for循环中的变量item中,将新创建的数组的值与第二个for循环中的变量进行比较,如果相等则break,第二个for循环结束后判断新创建的数组的长度是否等于第二个循环中的j变量,如果相等则向新创建的数组中添加第一个循环中的item。
var arr=[,'','',];函数remov(array){ var RES=[];for (var i=,len=array.length伊琳;I){ var item=array[I];for(var j=;jres.lengthj){ if(RES[j]==item){ break;} } if(RES . length==j){ RES . push(item);} }返回res} console . log(remov(arr));//[,'','',]当然,还有很多其他的阵列重复数据消除方法,这里就整理了这么多。请指出任何错误或不规范之处,让我们一起讨论和学习。
添加面试问题:
标题描述:从1开始对输入字符串进行编号。如果遇到奇数小写英文字母,会转换成对应的大写字母。如果遇到非英文字母,奇数和偶数将不被计算在内,但字符将被保留
var str='sdt$^uyggtdgabn';document . write(str ' br/');//将原始字符串输出到文档var j=,reg=/[a-Za-Z]/;//j变量用于计数和定义一个正则表达式,以判断它是否是字母var sArr=str . split(' ');//将字符串转换为(var I=;isArr.lengthI) {if (reg。test(sarr[I])} {//如果是字母j j=;If (j%==){//如果是奇数,将当前项目转换为大写的sArr[i]=sArr[i]。toUpperCase();} } } str=SarR . join(“”);//将数组转换为字符串文档. write(str);//将转换后的字符串输出到文档中,并附上转换前后字符串的比较图
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。
版权声明:JS重复数据删除和字符串奇数小写到大写的详细说明是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。