首先:有一组数据,每个都和这个一样 asdfafd1kj3jh5kj43bb55jh2kjhkj5 随机的英文和数字组合。
现在需求需要获取每条数据的后两个数字并给它加上span标签。
一般来说,正序的for循环就可以了。从头开始循环,我刚开始也是这样想的。
但是有几个问题也就出来了
1. 必须要循环完整条数据的每一个值
2.还要先把循环到的每个数字都保存起来,然后再去获取后两位数字的位置
3.给后两位数字加上span标签后,再放回去,又是个麻烦事。
后面,如果如果我倒过来循环,一切不就都解决了吗?
果然,倒过来循环,效率立马提升4到5倍。
var randomNum = 一组英文和数字的随机数;
var flagNum = 0; // 定义循环结束条件
var actualNum = ''; // 替换后的字符串
var arr = [],arr2 = []; //定义两个空数组,arr: 要替换的位置(索引); arr2: 要替换的字符
// 逆序循环当前获得的块
for (var i = randomNum.length; i >= 0; i--) {
if (!/[^0-9]/ig.test(num[i])) { // 只让数字进入
arr.push(i+1); // 该数字在字符串中的位置
arr2.push(randomNum[i]); //该数字
flagNum++; //循环结束条件判断
}
if (flagNum >= 2) { // 循环的数字(只判断数字,字母不计数)大于或等于2时 结束循环
break;
}
}
actualNum = replacePos(randomNum, arr[0], "<i>"+arr2[0]+"</i>"); // 逆序获得的第一个数字添加i标签(文字高亮)
actualNum = replacePos(randomNum, arr[1], "<i>"+arr2[1]+"</i>"); // 逆序获得的第二个数字添加i标签(文字高亮)
// 将actualNum(已经添加完标签的数)放回原数据中。
下面这段是替换代码
//替换指定的字符串
function replacePos(strObj, pos, replacetext) {
var str = strObj.substr(0, pos-1) + replacetext + strObj.substring(pos, strObj.length);
return str;
}
一些有趣的代码总能在无形中丰富自己。