字符串及数组操作

字符串操作

1.判断回文字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function palindrome(str){
// \W匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。
var re = /[\W_]/g;
// 将字符串变成小写字符,并干掉除字母数字外的字符
var lowRegStr = str.toLowerCase().replace(re,'');
// 如果字符串lowRegStr的length长度为0时,字符串即是palindrome
if(lowRegStr.length===0)
return true;
// 如果字符串的第一个和最后一个字符不相同,那么字符串就不是palindrome
if(lowRegStr[0]!=lowRegStr[lowRegStr.length-1])
return false;
//递归
return palindrome(lowRegStr.slice(1,lowRegStr.length-1));
}

2.翻转字符串

反向遍历字符串

1
2
3
4
5
6
function reverseString(str){
var tmp = '';
for(var i=str.length-1;i>=0;i--)
tmp += str[i];
return tmp
}

转化成array操作

1
2
3
4
5
6
7
8
9
10
11
12
function reverseString2(str){
var arr = str.split("");
var i = 0,j = arr.length-1;
while(i<j){
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
i++;
j--;
}
return arr.join("");
}

因为str[i]是只读的,不能str[0]=str[1]这样操作。

如果允许用reverse(),也可以用’str’.split(‘’).reverse().join(‘’)实现。

3.生成指定长度随机字符串

配合模糊等效果可以生成个验证码- -

1
2
3
4
5
6
7
function randomString(n){
var str = 'abcdefghijklmnopqrstuvwxyz0123456789';
var tmp = '';
for(var i=0;i<n;i++)
tmp += str.charAt(Math.round(Math.random()*str.length));
return tmp;
}

4.统计字符串中次数最多字母

利用Object中key的唯一性,利用key来进行筛选,然后计数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function findMaxDuplicateChar(str) {
if(str.length == 1) {
return str;
}
var charObj = {};
for(var i = 0; i < str.length; i++) {
if(!charObj[str.charAt(i)]) {
charObj[str.charAt(i)] = 1;
} else {
charObj[str.charAt(i)] += 1;
}
}
var maxChar = '',
maxValue = 1;
for(var k in charObj) {
if(charObj[k] >= maxValue) {
maxChar = k;
maxValue = charObj[k];
}
}
return maxChar + ':' + maxValue;
}

数组操作

1.数组去重

还是利用Object中key的唯一性,利用key来进行筛选。

1
2
3
4
5
6
7
8
9
10
11
function unique(arr){
var obj = {}
var data = []
for(var i in arr){
if(!obj[arr[i]]){
obj[arr[i]] = true;
data.push(arr[i]);
}
}
return data;
}

2.Number数组中最大差值

1
2
3
4
5
6
7
8
9
10
function getMaxProfit(arr){
var min = arr[0], max = arr[0];
for(var i=0;i<arr.length;i++){
if(arr[i]<min)
min = arr[i];
if(arr[i]>max)
max = arr[i];
}
return max - min;
}