常用的js的字符串和数组的方法
一.字符串
所有的字符串方法都不会改变原来字符串。
1.indexOf()
根据字符找下标,看返回值是否为-1,为-1就不存在。
var str='abcdefg';
var pos=str.indexOf("a")
console.log(pos)//0
console.log(str)//'abcdefg'
如果有第二个参数,就是开始找的索引
2.提取部分字符串slice(),substing(),substr()
slice()支持负索引,两个参数,分别是起始下标和结束下标(包左不包右)
substing()不支持负索引,两个参数,分别是起始下标和结束下标(包左不包右)
substr()支持负索引,两个参数,分别是开始索引和截取个数
var str='abcdefg';
var pos1=str.slice(1,3);
var pos2=str.substring(1,3);
var pos3=str.substr(1,3);
console.log(pos1)//"bc"
console.log(pos2)//"bc"
console.log(pos3)//"bcd"
console.log(str)//'abcdefg'
3.replace替换
/i 大小写不敏感
/g 全局搜索
var str='abcdefgabcdefg';
var pos=str.replace("ab","88")
console.log(pos)//"88cdefgabcdefg"
console.log(str)//"abcdefgabcdefg"
使用全局搜索就全部替换:
var str='abcdefgabcdefg';
var pos=str.replace(/ab/g,"88")
console.log(pos)//"88cdefg88cdefg"
console.log(str)//"abcdefgabcdefg"
4.toUpperCase 大写,toLowerCase 小写
var str='abcdefg';
var pos=str.toUpperCase()
console.log(pos)//ABCDEFG
console.log(str)//abcdefg
5.concat 连接字符串
var str1='abc';
var str2="def"
var pos=str1.concat("",str2)//前面的""去掉也可以
console.log(pos)//abcdef
6.split()字符串变数组
var str='a,b,c,d';
var res1=str.split(" ")
var res2=str.split("")
var res3=str.split(",")
console.log(str)//"a,b,c,d"
console.log(res1)//["a,b,c,d"]
console.log(res2)//["a",",","b","c",",","d"]
console.log(res3)//["a","b","c","d"]
7.trim()字符串去除前后空格
var str=' abcdefg ';
var pos=str.trim()
console.log(pos)//"abcdefg"
console.log(str)//" abcdefg "
二.数组
1.数组变字符串
tostring()返回的字符串是逗号分开
join()返回的字符串可自定义
var arr=["a","b","c","d"];
var pos=arr.toString()
console.log(arr)//["a","b","c","d"]
console.log(pos)//"a,b,c,d"
var arr=["a","b","c","d"];
var pos=arr.join("*")
console.log(arr)//["a","b","c","d"]
console.log(pos)//"a*b*c*d"
2.数组长度去掉和增加(会改变原数组)
push()在尾巴上增加,返回新数组长度
var arr=["a","b","c","d"];
var pos=arr.push("m")
console.log(arr)//["a","b","c","d","m"]
console.log(pos)//5
pop()在尾巴上去掉,返回被去掉值
var arr=["a","b","c","d"];
var pos=arr.pop()
console.log(arr)//["a","b","c"]
console.log(pos)//"d"
shift()在前面去掉,返回去掉值
var arr=["a","b","c","d"];
var pos=arr.shift()
console.log(arr)//["b","c","d"]
console.log(pos)//"a"
unshift()在前面增加,返回新数组长度
var arr=["a","b","c","d"];
var pos=arr.unshift("666")
console.log(arr)//["666","a","b","c","d"]
console.log(pos)//5
3.splice()拼接数组,参数:下标,删除个数,新元素
返回被删掉的数组,原数组被更改
var arr=["a","b","c","d"];
var pos=arr.splice(2,1,"1","2","3")
console.log(arr)//["a","b","1","2","3","d"]
console.log(pos)//["c"]
4.slice()裁剪数组
两个参数,分别是起始下标和结束下表,包左不包右。
返回裁剪下来的值,不会改变原数组。
var arr=["a","b","c","d"];
var pos=arr.slice(1,3)
console.log(arr)//["a","b","c","d"]
console.log(pos)//["b","c"]
5.concat()合并数组
可以合并多个数组,不会改变原数组,直接返回新的数组。
var arr=["a","b","c","d"];
var arr1=["66","88"]
var pos=arr.concat(arr1)
console.log(arr)//["a","b","c","d"]
console.log(pos)//["a","b","c","d","66","88"]
6.数组排序
原数组被改变,返回的是新数组。排序后,返回的新数组和原数组长一样
1)字母排序:直接sort;字母反转:reverse
var arr=["d","a","c","b"]
var pos=arr.sort()
console.log(arr)//["a","b","c","d"]
console.log(pos)//["a","b","c","d"]
2)数字排序
sort((a - b)=>{ return a - b }) 升序
sort((a - b)=>{ return b - a }) 降序
方法一:
var arr=[100,22,3,13,4,11,25]
var pos=arr.sort((a,b)=>{return a-b})
console.log(arr)//[3, 4, 11, 13, 22, 25, 100]
console.log(pos)//[3, 4, 11, 13, 22, 25, 100]
方法二:
var arr=[100,22,3,13,4,11,25]
var pos=arr.sort((m,n)=>{
if(m<n){return -1}
else if(m>n){return 1}
else return 0
})
console.log(arr)//[3, 4, 11, 13, 22, 25, 100]
console.log(pos)//[3, 4, 11, 13, 22, 25, 100]
3)对象数组
如果是数字就直接比较,但如果是字符串需要转换成大小写统一。
var cars=[
{type:"a",year:2016},
{type:"b",year:2001},
{type:"c",year:2019}
]
cars.sort((a,b)=>{return a.year - b.year})
console.log(cars)
打印结果:
7.数组迭代
1)forEach()
三个参数:value(每一个item),index(每一个item的index),array(数组自己)
会改变原数组
示例:单个item加100
var arr=[1,2,3,4,5,6]
arr.forEach((val,index,arr)=>{
arr[index]+=100
})
console.log(arr)// [101, 102, 103, 104, 105, 106]
示例:叠加
var sum=0
var arr=[1,2,3,4,5,6]
arr.forEach((val,index,arr)=>{
sum+=val
})
console.log(arr)// [1,2,3,4,5,6]
console.log(sum)//21
2)map()
三个参数:value(每一个item),index(每一个item的index),array(数组自己)
不会改变原数组,返回一个新的数组
相当于for循环,改变每个的值
var arr1=[1,2,3,4,5,6]
var arr2=arr1.map((val,index,array)=>{
return val*2
})
console.log(arr1)//[1,2,3,4,5,6]
console.log(arr2)//[2, 4, 6, 8, 10, 12]
3)filter()
三个参数:value(每一个item),index(每一个item的index),array(数组自己)
不会改变原数组,返回一个新的数组
var arr1=[1,2,3,4,5,6]
var arr2=arr1.filter((val,index,array)=>{
return val>3
})
console.log(arr1)//[1,2,3,4,5,6]
console.log(arr2)//[4, 5, 6]
4)reduce()
四个参数:total(初始值或者上次的结果),value,index,array ,从左往右加
不会改变原数组,返回一个新的数组
var arr1=[1,2,3,4,5,6]
var arr2=arr1.reduce((total,val,index,array)=>{
return total+val
})
console.log(arr1)//[1,2,3,4,5,6]
console.log(arr2)//21
reduceRight()
四个参数:total(初始值或者上次的结果),value,index,array ,从右往左加
不会改变原数组,返回一个新的数组
5)every()
是否所有值都满足条件,返回boolean值
三个参数:value(每一个item),index(每一个item的index),array(数组自己)
var arr1=[1,2,3,4,5,6]
var res=arr1.every((val,index,array)=>{
return val>18
})
console.log(arr1)//[1,2,3,4,5,6]
console.log(res)//false
6)some()
是否里面有一个值满足条件,返回boolean值
var arr1=[1,2,3,4,5,6]
var res=arr1.some((val,index,array)=>{
return val>5
})
console.log(arr1)//[1,2,3,4,5,6]
console.log(res)//true
8.indexOf() 返回索引,未找到值就返回-1,从左往右
lastIndexOf() 返回索引,未找到值就返回-1,从右往左
都不改变原数组
var arr1=[1,2,3,4,5,6,1,2,3,4,5,6]
var res=arr1.indexOf(5)
console.log(arr1)//[1,2,3,4,5,6,1,2,3,4,5,6]
console.log(res)//4
var arr1=[1,2,3,4,5,6,1,2,3,4,5,6]
var res=arr1.lastIndexOf(5)
console.log(arr1)//[1,2,3,4,5,6,1,2,3,4,5,6]
console.log(res)//10
9.find() 返回满足某种条件的第一个元素(从左往右)
findIndex() 返回满足某种条件的第一个元素的下标(从左往右)
var arr1=[5,6,7,8,4,5,6,7,8]
var res=arr1.find((val,index,arr)=>{
return val>7
})
console.log(arr1)//[5,6,7,8,4,5,6,7,8]
console.log(res)//8
var arr1=[5,6,7,8,4,5,6,7,8]
var res=arr1.findIndex((val,index,arr)=>{
return val>7
})
console.log(arr1)//[5,6,7,8,4,5,6,7,8]
console.log(res)//3
10.Object.keys() 可遍历对象,也可以遍历数组
var person={name:'Lily',age:11,sex:'girl'}
var arr=Object.keys(person)
console.log(arr)//["name", "age", "sex"]
11.Object.values()
var person={name:'Lily',age:11,sex:'girl'}
var arr=Object.values(person)
console.log(arr)//["Lily", 11, "girl"]
12.for …in遍历key下标
var arr=["one","two","three"]
for(let i in arr){
console.log(i)
console.log(arr[i])
}
for…in循环不仅遍历数字键名,还会遍历手动添加的其他键,甚至包括原型链上的键
13.for … of 遍历数组值item
var arr=["one","two","three"]
for(let i of arr){
console.log(i)
}