数组和字符串的方法整合
js中的数组和字符串有点类似,不是说本质上,而是在遍历,获取时的类似。从标识来说,可以一眼看出那个是数组,那个是字符串;但在使用遍历时,会不经意的将两者混淆,导致方法用错。同时两者的方法又有好几个相同的,但需注意语义,以及有些方法是不会对原数组产生影响的。以下是我整理的一些关于数组和字符串的一些方法,不保证完整性。
数组方法
arr.push() 可向数组的末尾添加一个或多个元素,并返回新的长度。会影响原数组
1 var a = [1,2]; 2 a.push(3); 3 console.log(a); // [1,2,3] 4 console.log(a.push(8)); //4
arr.unshift() 在数组开头添加元素,返回该元素值。会影响原数组
1 var a = [1,2,3,"hello"]; 2 console.log(a.unshift("world")); // world 3 console.log(a); // ["world",1,2,3,"hello"]
arr.pop() 用于弹出数组最后一个元素,返回该元素的值。会影响原数组。(等同于在数组中删除此元素)
1 var a = [1,2]; 2 console.log(a.pop()); // 2 3 console.log(a); // [1]
arr.shift() 将数组的第一个元素从中删除,并且返回第一个元素的值。会影响原数组。(删除操作)
var a = [1,2]; console.log(a.shift()); // 1 console.log(a); // [2]
arr.concat() 用于连接两个或者多个数组,返回一个新的数组。不会影响原数组。
1 var arr = [1,2,3,4]; 2 alert(arr.concat(1,2,3,[1,2,3],5).length); //11 3 arr.concat(1,2,4,[1,2,3],5); 4 alert(arr.length) //4
arr.join() 接收一个参数作为分隔符,以字符串的形式返回。不会影响原数组。它接受0参数或者1个参数,若是传了多个参数只有第一个是有效的。参数若是为无,默认为','
1 [1,2,3,4].join('0').split('') //["1", "0", "2", "0", "3", "0", "4"] 2 var arr = [1,2,3,4]; arr.join("&"); 3 console.log(arr) //[1,2,3,4]
arr.slice(n,m):用于切割并且创造一个新的数组,不会影响原数组。
- 1个参数: 从开始位置截取到结尾
- 2个参数: 从开始位置截取到结束位置 [a, b) 不包括结束位置本身
- 结束位置还可以是负数( 实际计算为:该负数 + 数组长度) 结束位置小于起始位置,返回 空数组 []
1 var a = [1, 2, 3]; 2 console.log(a.slice(1)); // [2, 3] 3 console.log(a.slice(1, 2)); // [2] 4 console.log(a); // [1, 2, 3] 原数组没有被改变 5 console.log(a.slice(1, -1)); // (-1 + 3) = 2 > a.slice(1, 2) > [2] 6 console.log(a.slice(1, -100)); // []
arr.splice(n,m,data) 用于截取数据,插入数据,删除数据。操作的是数据本身,所以会影响原数组。
- [开始位置]:当只有1个参数的时候:从数组的开始位置删掉剩下的所有数据,返回删掉的数据。
- [开始位置,截断的个数](注意,这和 slice 的第二个参数意义可是不一样的,这是 长度):以 n为起点,m为长度,删掉 [n, n+ m) 的元素
- [开始位置,截断个数,插入的数据]: (n, m, data): 以 n为起点, m为长度,删掉 [n, n+ m] 的元素,并填充 data 到删除的位置
1 var array = [15, 5, 10, 2, 0]; 2 console.log(array.splice(1, 3,1,2,1)); //5,10,2 3 console.log(array); //15, 1, 2, 1, 0 4 console.log(array.splice(1, 3)); //5,10,2 5 console.log(array); // [15,0] 6 console.log(array.splice(1)); // 0 7 console.log(array); //15
arr.reverse() 将数组元素倒顺,会影响原数组。
1 var a = [1,2,3,5]; 2 console.log(a.reverse()); // [5,3,2,1]
arr.sort(fn) 排序方法,参数:fn(a,b):比较函数,无参数的时候按照字母表 ascii 升顺排序
1 var a = [1, 2, 3, 5, 10, 25]; 2 console.log(a.sort()); // [1, 10, 2, 25, 3, 5]
sort()
默认对每一个 子项 调用转型方法 tostring()
,之后才进行判断。而这个时候其实是根据 ascii 码的大小来判断的。因此 "15" < "5"。先比较第一位,再比较第二位。想要按我们预期的排序,需进行一些处理。
1 var array = [15, 5, 10, 2, 0]; 2 array.sort(function(a,b){ 3 return a-b; 4 }) 5 console.log(array); //[0, 2, 5, 10, 15]
以下为es5新增方法(新增的方法都不会影响原数组)
arr.indexof() 返回在该数组中第一个找到的元素位置,若不存在则返回 -1
1 var array = [15, 5, 10, 2, 0]; 2 console.log(array.indexof(1)); //-1 3 console.log(array.indexof(15)); //0
arr.foreach():对数组中的每一项运行给定函数,这个方法没有返回值(遍历数组,获得数组所有元素)参数为function类型,默认有传参(遍历数组内容,对应数组索引,数组本身)
1 var array = [15, 5, 10, 2, 0]; 2 array.foreach(function (value, index, array) { 3 console.log(array[index]); 4 });
arr.map():对数组中的每一项运行给定函数,返回每次调用结果组成的数组。
1 var array = [15, 5, 10, 2, 0]; 2 var num = array.map(function (value, index, array) { 3 return value * 3; 4 }); 5 console.log(array, num); //[15, 5, 10, 2, 0] ,[45, 15, 30, 6, 0]
arr.filter():对数组中的每一项运行给定函数,返回该函数会返回 true 的项组成的数组(筛选)
1 var array = [15, 5, 10, 2, 0]; 2 var num = array.filter(function (value, index, array) { 3 return value >0; 4 }); 5 console.log(array, num); //[15, 5, 10, 2, 0] ,[15, 5, 10, 2]
两个归并的方法
- arr.reduce(function(pre, next, index, array) {}) 从左到右
- arr.reduceright(function(pre, next, index, array) {}) 从右到左
some: 对数组中的每一项运行给定函数,如果函数对任一项返回 true,就会返回 true,否则 false
every:对数组中的每一项运行给定函数,如果函数对所有的项都返回 true,才返回 true,否则 false
以上就是我所知晓的所有数组方法,es6还未涉及到,后续补充!!
字符串方法
indexof(data,start) 用于返回某个数组或者字符串中规定字符或者字符串的位置;当前查询字符所在的位置的下标,如无,返回-1,start表示从第几位开始查询。
1 var str="hello world!" 2 console.log(str.indexof("h")); //0 3 console.log(str.indexof("i")); //-1
str.lastindexof() 判断一个字符最后一次出现在某个字符串的索引,如果包含返回它的索引,如果不包含返回-1.
1 var str="hello world!" 2 console.log(str.lastindexof("d")); // 10 3 console.log(str.lastindexof("i")); //-1
str.charat() 返回指定位置的字符
1 var str="hello world!" 2 console.log(str.charat(1)); //e
1 var str="hello world!" 2 console.log(str.substr(1)); //ello world! 3 console.log(str.substr(1,3)) //ell
str.substring(n,m) 返回从指定位置n,到结束位置(不含)m 的字符串,如果不指定结束位置,则从开始位置到结尾
1 var str="hello world!" 2 console.log(str.substring(1)); //ello world! 3 console.log(str.substring(1,3)) //el
str.slice(n,m) 同substring,需要注意和数组中方法slice()的相似
1 var str="hello world!" 2 console.log(str.slice(1)); //ello world! 3 console.log(str.slice(1,3)) //el
str.split("-") 通过指定字符分割字符串,返回一个数组
1 var str="hello world!" 2 console.log(str.split(" ")); // ["hello", "world!"]
str.replace("需要替换的字符串","替换之后的字符串") 将字符串中的一些字符替换为另外一些字符。最好配合正则使用
1 var str="hello world!" 2 console.log(str.replace("l","*")); // he*lo world!
str.charcodeat() 返回指定索引出的unicode字符
1 var str="hello world!" 2 console.log(str.charcodeat(0)); // 104
str.concat() 拼接2个字符串,返回一个新字符串,对原有字符串没有任何改变。
1 var str="hello world!" 2 console.log(str.concat("d")); // hello world!d 3 console.log(str); //hello world!
str.match() 可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。把找到的字符放在数组里,返回一个数组。
1 var str="hello world!" 2 console.log(str.match("d")); // ["d", index: 10, input: "hello world!", groups: undefined]
str.search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。
1 var str="hello world!" 2 console.log(str.search("d")); // 10 3 console.log(str.search("l")); //2
以上为字符串的方法,同数组,不涉及es6的!!
注意方法是否会影响原数组!!