1:判断回文字符串
有感于这个小例子,所以对array和string的某些易混淆的方法进行了简单的对比,在另外一篇文章中
function palindrome(str){
//\W匹配任何非单词字符,等价于 "[^A-Za-z0-9_]" \w查找单词字符
var re = /[\W_]/g;
var lowRegStr = str.toLowerCase().replace(re,"");
if(lowRegStr.length === 0){
return true;
}
if(lowRegStr[0] !== lowRegStr[lowRegStr.length-1]){
return false;
}
//slice用法 返回子数组,并不会改变原数组 slice(start,end)
console.log(lowRegStr.slice(0,lowRegStr.length) +"/////1")
console.log(lowRegStr.slice(1,lowRegStr.length-1) +"/////12")
//递归
return palindrome(lowRegStr.slice(1,lowRegStr.length-1));
}
var arr = "abcder4554redcba";
console.log(palindrome(arr));
abcder4554redcba/////1
bcder4554redcb/////12
bcder4554redcb/////1
cder4554redc/////12
cder4554redc/////1
der4554red/////12
der4554red/////1
er4554re/////12
er4554re/////1
r4554r/////12
r4554r/////1
4554/////12
4554/////1
55/////12
55/////1
/////12
true
2:翻转字符串
刚看到这个的时候脑海中第一反应就是用str.split("").reverse().join(""),但是要排除这个方法,另外想,不用reverse()
思路一:模拟reverse()方法
function reserveString(str){
var temp = '';
for(var i = str.length-1;i>=0;i--){
temp += str[i];
}
return temp;
}
var ostr = "helloString";
reserveString(ostr);//"gnirtSolleh"
思路2:转化成数组再join
function reserveStrArr(str){
var oArr = str.split("");
var i = 0,j = oArr.length-1; var times = 0;
while(i<j){
tmp = oArr[i];
oArr[i] = oArr[j];
oArr[j] = tmp;
i++;
j--;
times++;
}
console.log(times);
return oArr.join("")
}
var ostr = "helloString";
reserveStrArr(ostr);//"gnirtSolleh" 5
function reserveStrArr(str) {
var oArr = str.split("");
var result = [];
var times = 0;
for(var i=oArr.length;i>=0;i--){
result.push(oArr.pop());
times++;
}
console.log(times);
return result.join("");
}
var ostr = "helloString";
reserveStrArr(ostr);//"gnirtSolleh" 12