整理了些字符串常用的玩法
1.去除字符串两边的空格
var str = " 来杯82年的咖啡 ";
str = str.replace(/(^\s*)|(\s*$)/g, ""); //方法一
str = str.trim(); //方法二
2.字符串去重
//方法一:for循环(两次for消耗性能)
function doubleKill(str){
var newStr = '';
var flag;
var len = str.length;
for(var i=0; i<len; i++){
flag = 1;
var newLen = newStr.length;
for(var j=0; j<newLen; j++){
if(str[i] == newStr[j]){
flag = 0;
break;
}
}
if(flag){
newStr = newStr + str[i];
}
}
return newStr;
}
//方法二:indexOf(本身也是遍历查找)
function doubleKill(str){
var newStr = '';
var len = str.length;
for(var i=0; i<len; i++){
if(newStr.indexOf(str[i]) == -1){
newStr = newStr + str[i];
}
}
return newStr;
}
//方法三:对象属性(会额外创建对象)
function doubleKill(str){
var obj = {};
var newStr = '';
var len = str.length;
for(var i=0; i<len; i++){
if(!obj[str[i]]){
newStr = newStr + str[i];
obj[str[i]] = 1;//注意,这里的1是给对象属性赋值,这个值可以任意取。意思是把每个遍历的字符作为对象属性并赋值保存,保证该属性的唯一性
}
}
return newStr;
}
//方法四:核心思想为使用数组的filter方法过滤掉除第一次出现的字符以外其它字符,然后join连接字符串,s、i、o 3个参数分别为:当前字符、当前字符索引、原字符串
//此方法妙处在于利用js的call方法改变宿主,使用字符串调用数组中的过滤方法(字符串无此方法),减少了复杂的循环步骤;并且此方法没有使用多余的变量减少内存开支;巧妙的利用indexOf取出字符串中第一次出现的字符(非第一次出现的字符被过滤掉)。因而实现此需求。
var str = '1112223455567';
var newStr = [].filter.call(str,function(s,i,o){return o.indexOf(s)==i;}).join('');
console.log(newStr);
3.字符串倒序
//方法一
var reverse = function( str ){
return str.split('').reverse().join(''); //先变数组,调用数组方法,再变回字符串
};
//方法二
var reverse = function( str ){
var stack = [];//生成一个栈
for(var len = str.length,i=len; i>=0; i-- ){
stack.push(str[i]);
}
return stack.join('');
};
//方法三
var reverse = function( str ){
var newStr = '',
i = str.length;
for(; i >= 0; i--) {
newStr += str.charAt(i);
}
return newStr;
};
4. 每个字符重复出现得次数
//方法一: 有兼容问题
str.split('').reduce((p, k) => (p[k]++ || (p[k] = 1), p), {});
//方法二
var temp = {};
'123 34523 45435'.replace(/(\w{1})/g,function($1){
temp[$1] ? temp[$1]+=1 : temp[$1] = 1;
});
console.log(temp);
//方法三
function countWords(str) {
var temp = {};
for (var i = 0; i < str.length; i++) {
var e = str[i];
if (!temp[e]++)
temp[e] = 1;
}
return temp;
}
5.一个字符出现的次数
var str = '我真的sdgheeeegbn好爱啊啊啊啊爱啊你';
function countAWord(str,word) {
return (str.split(word)).length-1;
}
console.log(countAWord(str,'啊')); //5
6. 去除字符串中所有字母/汉字/数字
function removeLetter(str) {
var result;
var reg = /[a-zA-Z]+/g;
//汉字 /[^\u4e00-\u9fa5]/gi
//数字 /\d+/g
while (result = str.match(reg)) {
str = str.replace(result[0], '');
}
return str;
}
7. 在字符串某个位置插入字符串/字符
function addStr(oldStr,addItem,afterWhich){
var strArr = oldStr.split('');
strArr.splice(oldStr.indexOf(afterWhich)+1,0,addItem);
return strArr.join('');
}
addStr('12345678','dfgh','4');
8.去除字符串所有空格(里边,两边)
str.replace(/\s*/g,"");