关于对字符串和数组的处理
JS数组操作
- 创建数组
var arr=new Array();
var arr=[]
- join()-------------------数组.join(分隔符) => 字符串
var arr=[1,2,3]
arr.join() è“1,2,3”
arr.join(‘-’) è”1-2-3”
- push()和pop()
push() : 从数组后面添加任意个参数 arr.push(‘param1’,’param2’)
pop() : 从数组后面抛出一个你参数 arr.pop()
- shift() 和 unshift()
shift() : 参数数组的第一项 arr.shift()
unshift() : 从数组前面添加任意项 arr.unshift(‘param1’,’param2’)
- sort()
arr.sort() : 升序排序一个数组
["a", "d", "c", "b"
].sort() // ["a", "b", "c", "d"]
[13, 24, 51, 3].sort() //[13, 24, 3, 51]
注意:上面的例子,不能按照数值排序得分原因是:sort()方法执行的时候,对于每个数组项都会调用toString()方法转型
- reverse()
反转数组项
[13, 24, 51, 3].reverse() // [3, 51, 24, 13] 原数组改变
- concat()
将参数传入原数组中,这个方法会先创建原数组的副本,然后将接收到的参数添加到数组的尾部,最后返回新构成的数组
var arr=[1,2,3]
arr.concat(9,[5,6]) // [1,2,3,9,5,6]
- slice()
(1)传入两个参数:slice(开始下标,结束下标) (返回下标之间所截取的新数组,不包括结束项);如果传入的结束项为负数slice(正数,负数),则截取的数组开始项和结束项都不包括
(2)传入一个参数:slice(开始下标) (返回从传入下标到数组末尾·所形成的新数组,不包括开始项
var arr = [1,3,5,7,9,11];
var arrCopy = arr.slice(1); è [3, 5, 7, 9, 11]
var arrCopy2 = arr.slice(1,4);è [3, 5, 7]
var arrCopy3 = arr.slice(1,-2);è [3, 5, 7]
var arrCopy4 = arr.slice(-4,-1);è [5, 7, 9]
- splice()
可以实现数组的删除、插入、替换;
var arr=[1,2,3,4,5]
删除:splice(要删除的第一项的位置,要删除的项数)
arr.slplice(0,2) è[3,4,5]
插入:splice(起始位置,0(要删除的项数),要插入的项1,要插入的项2…)
arr.splice(2,0,a,b) è [1,2,a,b,3,4,5] //从第二个2位置开始,变成要插入
//数据,其他数据紧接其后
替换:splice(起始位置,要删除的项数,要插入的任意数量的项)
arr.splice(2,1,a) è[1,2,a,4,5]
- indexOf()和 lastIndexOf() 【返回项所在位置,找不到返回-1】
indexOf(要查找的项,【查找起点位置(从0开始)】);从数组的开头开始查找
lastIndexOf(要查找的项,【查找起点位置(从0开始)】);从数组末尾开始查找
var arr = [1,3,5,7,7,5,3,1];
console.log(arr.indexOf(5)); //2
console.log(arr.lastIndexOf(5)); //5
console.log(arr.indexOf(5,2)); //2
console.log(arr.lastIndexOf(5,4)); //2(从倒数第四个位置开始找,5在数组中的位置)
console.log(arr.indexOf("5")); //-1
【用于做数组去重】
var arr=[1,33,22,22,6,4,4,4]
var temp=[]
function compare(arr){
for(var i=0;i<arr.length;i++){
if(temp.indexOf(arr[i])==-1){
temp.push(arr[i])
}
}
return temp;
}
compare(arr)
console.log(temp)
- forEach() (ES5新增)
对数组做循环遍历:arr.forEach(每个数组项,[数组项索引],[数组本身])
var arr=[1,2,3,4,5]
arr.forEach(function(x,index,arr){
console.log(a+”-”+index+”-”(arr==arr))
})
输出:
1-0-true
2-1- true
3-2- true
4-3- true
5-4- true
【for in 遍历数组】
for(var i in arr){
console.log(i+"<--->"+ arr[i])
}
输出:
0<--->1
1<--->2
2<--->3
3<--->4
4<--->5
[遍历对象]
var arr=["a","b","c"]
var obj={
name:"a",
num:"123"
}
// for(in) 遍历数组的时候
for(i in arr){
console.log("索引"+i)
console.log("数组项值"+arr[i])
}
// $.each遍历数组
$.each(arr,function(index,value){
console.log("索引"+index)
console.log("数据项值"+value)
})
// 输出:
// 0<--->1
// 1<--->2
// 2<--->3
// 3<--->4
// 4<--->5
// for(in) 遍历对象的时候
for(i in obj){
console.log("属性名"+i)
console.log("属性值"+obj[i])
}
//$.each遍历对象的时候
$.each(obj,function(index,value){
console.log("属性名"+index);
console.log("属性值"+value)
})
- map() (ES5新增)
对数组中的每一项运行指定的函数
var arr2=arr.map(function( item ){
return 一个对item操作的新数组
})
【使用map做数组去重】
var arr=[1,1,1,3,3,22,22,6,4,4,4]
var arr2=[]
arr.map(function( item ){
if(arr2.indexOf ( item )== -1 ){
arr2.push( item )
}
})
console.log(arr2)
- filter() (ES5新增)
“过滤功能”,对数组中的每一项运行指定的函数,返回满足过滤条件的数组
【使用filter 做数组去重】
var arr=[1,1,1,3,3,22,22,6,4,4,4]
var arr2=[]
arr.filter(function(value,index){
// value是每个数据项的值;index是数据项索引
if( arr2.indexOf(value)==-1){
arr2.push(value)
}
})
console.log(arr2)
- every() (ES5新增)
判断数组中的每一项是否符合条件,只有全部符合条件的时候才返回true
var flag;
flag=arr.every(function(value){
return value>100
})
console.log(flag) //false
- some() (ES5新增)
var arr = [1, 2, 3, 4, 5];
var arr2 = arr.some(function(x) {
return x < 3;
});
console.log(arr2); //true
var arr3 = arr.some(function(x) {
return x < 1;
});
console.log(arr3); // false
- reduce()和 reduceRight() (ES5新增)
JS字符串操作
- charAt( )
charAt(位置):返回指定单个位置的字符串
var str=”Hello”
console.log(str.charAt(0)) è “H”
- concat()
str1.concat(str2)
--使用“+“更方便
- indexOf() 与 lastIndexOf()
indexOf(‘需查找的字符串’,[检索开始位置] )
检索字符串,对大小写字符敏感。若检索不到返回-1
lastIndexOf()
与上传参一直,区别在于从后往前找首次出现的位置,指的是找到字符串后,字符串在原字符串中的位置
var str="Hello world!"
console.log(str.lastIndexOf(‘Hello’)); //0
- match()
返回与传入参数匹配的字符串的值
--match(‘字符串’)
--match(正则表达式)
var str="Hello world!"
console.log(str.match(‘Hello’)); //Hello
stringObject.match(regexp)
//常用于查找与传入正则表达式一致的字符串
- replace()
replace(正则表达式/子串,替换成的目标字符串)
var str="Visit Microsoft!"
document.write(str.replace(/Microsoft/, "W3School"))
èVisit W3School!
- search()
*返回匹配字串的位置
*传入字串或者正则表达式,找不到返回-1
var str="Visit W3School!"
document.write(str.search(/W3School/)) //6
document.write(str.search(/w3school/)) //-1(search对大小写敏感)
document.write(str.search(/w3school/i)) //6 忽略大小写
- slice()
---提取字符串的某个部分
---str . slice ( start , end )--【包括start,不包括end】
start: 传入需要截取的开始位置和结束位置,如果开始位置传入复数,则表示从最后一位算起,-1表示最后一位
end: 若不制定,即截取start到字符串最后;若负数,即从后面开始算
var str="Hello happy world!"
document.write(str.slice(6)) // happy world!
document.write(str.slice(6,11)) //happy
- split()
---将字符串分割成数组
---string.split() 与 Array.join() 的作用相反
---split(separator,howmany)
separator:传入正则表达式或者字符串,以什么作为分割字符串的标准
howmany: 可选,表示返回数组的最大程度
var str="How are you doing today?"
document.write(str.split(" ") + "<br />") //[How,are,you,doing,today?]
document.write(str.split("") + "<br />")
//[ H,o,w, ,a,r,e, ,y,o,u, ,d,o,i,n,g, ,t,o,d,a,y,?]
document.write(str.split(" ",3))//[How,are,you]
- substr 与 substring
---substr(start , length) 【包括start】
start: 必选,若是负数,从后面数起
end: 可选,若不制定,则截取直到字符串末尾
var str="Hello world!"
document.write(str.substr(3)
) // lo world!
---substring(start, ,stop)
【其内容是start-stop-1位置的字符串,即包括start不包括stop】
start: 必选,非负整数
stop:可选,非负数;若不指定,则到末尾
var str="Hello world!"
document.write(str.substring(3)
) // lo world!