将字符串中含有数字部分内容反转,并且不能使用例如.join()等内置对象
例:var str= ‘qwerty 1sadfe qrqewb2 asdfgh abcdefg ads8fgh’;将该字符传化为‘ qwerty efdas1 2bweqrq asdfgh abcdefg hgf8sda’,不能使用内置对象
当我看到这个需求的时候我第一想到就是想把字符串转化成数组,在利用正则来判断数组中的元素是否有数字,有的话就遍历当前的数组元素,然后再这个数组,显然这已经超出这个题目的需求,那么该怎么查找到字符串中含有数字的部分并将其反转呢?
一起想想思路
- 第一步:先遍历整个字符串,遍历每一个字符,判断字符串是否为空,如果不是空,利用临时变量将字符串进行拼接遍历项;
- 第二步:设置一个标识,用于标记含有数字的临时变量,当字符串为空的时候,遍历临时变量看是否有数字,有数字就改变标识符的状态;
- 第三部:判断标识符的状态,反向遍历含有数字的临时变量,将其内容反转,最后将临时变量拼接到一起;
代码例下:
<script>
var str = 'qwerty 1sadfe qrqewb2 asdfgh abcdefg ads8fgh';
var newStr =''; //临时变量
var temp = ''; //临时变量
var result = '';
for(var i = 0 ; i < str.length; i++){
var bool = false; //标识,用于判断存储的临时变量是否有数字
if(str[i] !== ' ' ){
newStr = newStr + str[i];
console.log(newStr)
}else {
for(var j= 0; j < newStr.length; j++){ //遍历遍历的每一项,利用newStr[j]-0判断是否有数字 ,没有数字就跳出循环
if(newStr[j]-0 >= 0){
bool = true;
break;
}
}
if(bool){ //说明是含有数字的变量
for(var k= newStr.length-1; k >=0; k--){
temp = temp + newStr[k];
}
result =result + ' ' + temp;
temp=''
}else {
result = result + ' ' + newStr
}
newStr = ''
}
}
console.log(result)
</script>
注意仔细看打印的结果!有没有发现结果少了最后一个空格后的字符,这是为什么呢?
原因:在判断是否为空的时候最后一个字符后面没有空格,这时就没有将最后一个空格的字符进行拼接;
解决方法一:在判断字符串是否为空的时候,同时也判断是否是最后一项,当i的索引不等于字符最后一项的索引就让其拼接;
<script>
·······//同上省略
for(var i = 0 ; i < str.length; i++){
var bool = false; //标识,用于判断存储的临时变量是否有数字
if(str[i] !== ' ' && i !== str.length-1){ //在这里添加i索引的判断,判断否是最后一项
newStr = newStr + str[i];
console.log(newStr)
}else {
if(i === str.length-1){
newStr += str[i]
}
//后面同上省略不写
</script>
解决方法二:给字符串最后一项后面添加空格!(ps:偷懒的办法~_~)。