js数组与字符串常用方法总结
最近在梳理js的基础,首先从数组和字符串开始。
string常用方法:
1.substring(start开始位置的索引,end结束位置索引)截取的位置不包含结束位置的字符,只写一个参数表示从开始位置截取到最后
varstr='abcdefg'; str.substring(1)//得到bcdefgstr.substring(1,3)//得到bc
输入负值时将负值变为0,哪个较小作为开始位置
str.substing(-1,1) =>str.substring(0,1)//a
str.substring(1,-2)=>str.substring(0,1)//a
2.slice(start开始位置索引,end结束位置索引)基本和substring相似,区别在参数为负数。
varstr='abcdefg'; str.slice(1)//bcdefgstr.substring(1,3)//bc
输入负值时值与字符串的长度相加
str.slice(-1) =>str.slice(6) //g
str.slice(1,-2)=>str.slice(1,5) //bcde
str.slice(-2,-1)=>str.slice(5,6) //f
值绝对值大于字符串的长度时变为0
str.slice(-22)=>str.substring(0) //abcdefg
第二个参数绝对值大于字符串的长度时,返回''
3.substr(start开始位置索引,end需要返回的字符个数)
varstr='abcdefg'; str.substr(1)//bcdefgstr.substr(1,1)//b
输入负值时start参数与字符串的长度相加,end为负时参数变为0
str.substr(-1)=>str.substr(6)//g str.substr(-2,-3)//''
4.charAt(index)方法返回指定索引位置处的字符。如果超出有效范围(0与字符串长度减一)的索引值返回空字符串.
varstr='abcdefg'; str.charAt(2)//c
5.index(string) 返回String对象内第一次出现子字符串位置。如果没有找到子字符串,则返回-1。
varstr='abcdefga' str.indexOf('a') //0 str.indexOf('h')//-1
6.lastIndexOf(string) 倒叙查找
返回String对象内第一次出现子字符串位置。如果没有找到子字符串,则返回-1。
varstr='abcdefga' str.lastIndexOf('a')//7
7.split(str) 将字符串以参数分割为数组
varstr='abcadeafg' str.split('a')//["","bc","de","fg"]
8.toLowerCase方法返回一个字符串,该字符串中的字母被转换成小写。
9.toUpperCase方法返回一个字符串,该字符串中的所有字母都被转换为大写字母。
10.match()–方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配
11.search 方法返回与正则表达式查找内容匹配的第一个字符串的位置。
12.replace用来查找匹配一个正则表达式的字符串,然后使用新字符串代替匹配
http://www.cnblogs.com/bijiapo/p/5451924.html
数组常用的方法
1.push 添加到最后 返回添加后的数组
2.unshift 添加到最前面 返回添加后的数组
3.shift 删除(从前面) 返回处理后的数组
4.pop 删除最后一项 返回处理后的数组
5.reverse 数组翻转 返回处理后的数组
6.join 数组转化为字符串
vararr=[1,2,3,4,5],str=arr.join('--'); console.log(str);//1--2--3--4--5以join内的参数切割数组 console.log(arr);//[1,2,3,4,5]原数组未变
7.slice(start,end) 截取数组从start(开始)到end(结束不包含)
返回新数组,原数组不变
vararr=[1,2,3,4,5],new=arr.slice(2,4); console.log(new);//[3,4] console.log(arr);//[1,2,3,4,5]
8.concat 数组合并
9.splice(开始下标,个数,ele1,ele2....)剪接数组
(1).一个参数 从参数位置截取填写负数类似上面strslice 返回截好的数组原数组变化
vararr=[1,2,3,4,5]; console.log(arr.splice(1));//[2,3,4,5] console.log(arr);//[1] console.lgo(arr.splice(-1))//[5]
(2).二个参数 截取(开始位置,个数)返回截好的数组原数组变化
vararr=[1,2,3,4,5]; console.log(arr.splice(1,3));//[2,3,4] console.log(arr)//[1,5] arr.splice(0,1)=>arr.shift() arr.splcie(arr.length-1,1)=>arr.pop()
(3).添加 原数组增加
vararr=[1,2,3,4,5]; console.log(arr.splice(1,0,13));//[] console.log(arr);//[1,13,2,3,4,5]
(4).替换
vararr=[1,2,3,4,5]; console.log(arr.splice(1,2,'a','b'))//[2,3] console.log(arr);//[1,'a','b',4,5] arr.splice(0,0,1)=>arr.unshift(1); arr.splice(arr.length,0,1)=>arr.push(1)
10.arr.forEach(item,index,array){} 遍历,循环类似jquery的each
其中的item参数是数组中的内容,index为其索引,array表示数组本身
vararr=[1,2,3,4,5]; arr.forEach(function(item,index,array){ })
遇到嵌套跳出循环出现问题,暂时没有解决;
11.map方法 映射用法和forEach类似
varmen=[ {'name':1,'age':12}, {'name':2,'age':22}, {'name':3,'age':33} ], age=men.map(function(item){ returnitem.age; })
12.arr.sort 排序
vararr=[1,2,22,11,33,3,5,4]; console.log(arr.sort())//[1,11,2,22,3,33,4,5]
默认情况下sort方法是按ascii字母顺序排序的,而非我们认为是按数字大小排序
arr.sort(function(a,b){returna-b})
a-b从小到大b-a从大到小
13. 顺便写写我知道的排序方法
(1)冒泡排序 每次比较相邻的两个数,如果后一个数比前一个数小,换位置
functionbSort(arr){ vartmp; for(vari=0,len=arr.length-1;i<len;i++){ for(varj=0;j<len;j++){ if(arr[j]>arr[j+1]){ //换位置 tmp=arr[j+1]; arr[j+1]=arr[j]; arr[j]=tmp; } } } returnarr; } functionbSort(arr){ vartmp; arr.forEach(function(item,i){ arr.forEach(function(item,i){ if(item>arr[i+1]){ //换位置 tmp=arr[i+1]; arr[i+1]=arr[i]; arr[i]=tmp; } }) }) returnarr }
(2)快速排序二分法,找到中间的数,取出来(新数组),原数组没,每次和此数比较,小的放到左边,大的放到右面
functionfastSoft(arr){ varlen=arr.length; if(len<=1){returnarr} varcIndex=Math.floor(len/2), c=arr.splice(c,1), left=[], right=[]; arr.forEach(function(item,i){ if(item<c[0]){ left.push(item); }else{ right.push(item); } }) returnfastSoft(left).concat(c,fastSoft(right)); }
14.数组的去重也写下吧
(1)双层循环不是很好
vararr=[2,3,2,2,2,4,5], arr2=[]; functionfind(arr2,ele){ for(vari=0,len=arr2.length;i<len;i++){ if(arr2[i]==ele)returntrue; } returnfalse; } for(vari=0,len=arr.length;i<len;i++){ if(!find(arr2,arr[i])){ arr2.push(arr[i]); } }
(2)利用json的key值无重复
vararr=[2,3,2,2,2,4,5], json={}, arr2=[]; arr.forEach(function(item,i){ if(!json[item]){ json[item]=222; } }); for(varnameinjson){ arr2.push(Number(name));//类型发生变化了 }
(3)利用sort方法排序,去掉旁边相同项
vararr=[2,3,2,4,4,4,5], arr2=[]; arr.sort(); for(vari=0;i<arr.length;i++){ if(arr[i]==arr[i+1]){ arr.splice(i--,1); } }
一些常见数学方法
math.abs()取绝对值math.ceil()向上取整math.floor()向下取整 math.round()四舍五入math.roundom functiongetRan(n,m){ returnMath.floor(Math.random()*(m-n)+n); }
数组和字符串的一些综合应用
1.截取后缀名
(1)varstr='1.xxx.avi';
str=str.substring(str.lastIndexOf('.')+1);
(2)varstr='1.xxx.avi';
vararr=str.split('.'); console.log(arr[arr.length-1]);
2.字母翻转,首字母大写
varstr='woshiyigedemo', arr=str.split(''); for(vari=0;i<arr.length;i++){ console.log() arr[i]=arr[i].charAt(0).toUpperCase()+arr[i].substring(1); } arr.reverse(); str=arr.join('');
3.str中字符出现次数的统计
varstr='aaaandkdffsfsdfsfssq12345', json={}, n=0, sName; for(vari=0,len=str.length;i<len;i++){ varLetter=str.charAt(i); //统计次数 if(json[Letter]){ json[Letter]++; }else{ json[Letter]=1; } } //找最大 for(varnameinjson){ if(json[name]>n){ n=json[name]; sName=name; } } console.log('出现最多的字母'+sName+'次数为'+n);
4. 简单的url参数解析
functiongetData(){ varsearch=window.location.search.substring(1); if(!search){ return; } vararr=search.split('&'), arr2=[], json={}, key, alue; for(vari=0;i<arr.length;i++){ arr2=arr[i].split('='); key=arr2[0]; value=arr2[1]; json[key]=value; } returnjson; }
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持毛票票!