JS数组常见方法
1.push(参数1): 向数组尾部添加一个或多个元素,并返回添加新元素后的数组长度。注意,该方法会改变原数组。
var arr=[0,1,2,3,4];
console.log(arr);//只要后面向数组添加了元素,打印出来的都是添加元素后的数组[ 1, 2, 3 ,4],
var len =arr.push(5);//向数组尾部添加一个元素5,并返回新添加的数组的长度length
console.log(len)//打印出来的是长度6
console.log(arr)//打印出来的数组是添加元素之后的数组[ 1, 2, 3 ,4],
2.pop(): 删除数组的最后一个元素,并返回该元素。该方法会改变原数组。
var arr=[1,2,3];
console.log(arr);//打印出来的是删除元素后的数组[1,2]
var b=arr.pop();//返回的是删除后的元素
console.log(b);//打印出来的是最后一个元素3
console.log(arr);//打印出来的是删除元素后的数组
3.unshift():在数组的第一个位置添加元素,并返回添加新元素后的数组长度。注意,该方法会改变原数组。
var arr = ['a', 'b', 'c'];
var len=arr.unshift('x'); // 4
console.log(arr); // ['x', 'a', 'b', 'c']
4.shift():删除数组的第一个元素,并返回该元素。注意,该方法会改变原数组。
var arr = ['a', 'b', 'c'];
var b=arr.shift() // 'a'
console.log(arr) // ['b', 'c']
shift()方法还可以遍历并清空一个数组。
var list = [1, 2, 3, 4, 5, 6];
var item;
while (item = list.shift()) {
console.log(item);//遍历数组,循环的输出1,2,3,4,5,6.遍历完之后清空数组
}
console.log(list); // 数组为空[]
5.valueOf():返回数组的本身。
var arr = [1, 2, 3];
var aarr=arr.valueOf();
console.log(aarr); // [1, 2, 3]
6.indexOf():返回指定元素在数组中出现的位置,如果没有出现则返回-1。
var arr = ['a', 'b', 'c'];
var n=arr.indexOf('c') // 2
console.log(n);//打印出来的是2
var m=arr.indexOf('y'); // -1
console.log(m);
indexOf方法还可以接受第二个参数,表示搜索的开始位置。
var nm=arr.indexOf('a', 1) //nm的值为-1
7.toString():返回数组的以逗号分割的字符串形式。
var arr = [1, 2, 3];
var str=arr.toString() // "1,2,3"
console.log(str);
var arr = [1, 2, 3, [4, 5, 6]];
var str1=arr.toString() ; // "1,2,3,4,5,6"
console.log(str1);
8.join():以参数作为分隔符,将所有数组成员组成一个字符串返回。如果不提供参数,默认用逗号分隔
var arr = [1, 2, 3, 4];
var str=arr.join()
console.log(str);// "1,2,3,4"
var str1=arr.join(' ')
console.log(str1);// “1 2 3 4”
var str2=arr.join(' | ')
console.log(str2) // "1 | 2 | 3 | 4"
9.concat():用于多个数组的合并。它将新数组的成员,添加到原数组的尾部,然后返回一个合并后的新数组,原数组不变。
1 var arr = [1,2,3];
2 var arr1 = arr.concat([4,5,6]);
3 console.log(arr1); //[1,2,3,4,5,6]
10.reverse():用于颠倒数组中元素的顺序,返回改变后的数组。注意,该方法将改变原数组。
1 var arr = ['a', 'b', 'c'];
var arr1=arr.reverse() // ["c", "b", "a"]
console.log(arr1) // ["c", "b", "a"]
console.log(arr) // 也是["c", "b", "a"]
11.slice():用于截取原数组的一部分,返回一个截取的新数组,原数组不变。
slice(start,end)它的第一个参数为起始位置(从0开始),第二个参数为终止位置(但该位置的元素本身不包括在内)。如果省略第二个参数,则一直返回到原数组的最后一个成员。
var arr = ['a', 'b', 'c'];
arr.slice(0) // ["a", "b", "c"]
arr.slice(1) // ["b", "c"]
arr.slice(1, 2) // ["b"]
arr.slice(2, 6) // ["c"]
arr.slice() // ["a", "b", "c"] 无参数返回原数组
arr.slice(-2) // ["b", "c"] 参数是负数,则表示取倒数的后两位
arr.slice(-3) //[“a”,”b”,”c”] 表示 取倒数的后三位
arr.slice(-2, -1) // ["b"] 表示取倒数的第二位,-1不包含在范围内
arr.slice(-3,-2)//表示取倒数的第三位
arr.slice(-3,-1)//表示取倒数的第二位和第三位
12.splice():删除原数组的一部分成员,并可以在被删除的位置添加入新的数组成员,返回值是被删除的元素。注意,该方法会改变原数组。
splice(start,delNum,addElement1,addElement2,...)第一个参数是删除的起始位置,第二个参数是被删除的元素个数。如果后面还有更多的参数,则表示这些就是要被插入数组的新元素。
var arr = ['a', 'b', 'c', 'd', 'e', 'f'];
arr.splice(4, 2) // ["e", "f"]从原数组4号位置,删除了两个数组成员
console.log(arr) // ["a", "b", "c", "d"]
var arr = ['a', 'b', 'c', 'd', 'e', 'f'];
arr.splice(4, 2, 1, 2) // ["e", "f"]原数组4号位置,删除了两个数组成员,又插入了两个新成员
console.log(arr) // ["a", "b", "c", "d", 1, 2]
var arr = ['a', 'b', 'c', 'd', 'e', 'f'];
arr.splice(-4, 2) // ["c", "d"] 起始位置如果是负数,就表示从倒数位置开始删除,从倒数第四个位置开始删除,并删除两个
var arr = [1, 1, 1];
arr.splice(1, 0, 2) // [] 如果只插入元素,第二个参数可以设为0
conlose.log(arr) // [1, 2, 1, 1]
var arr = [1, 2, 3, 4];
arr.splice(2) // [3, 4] 如果只有第一个参数,等同于将原数组在指定的位置开始删除,直到数组最后
console.log(arr) // [1, 2]
13.sort():对数组成员进行排序,默认是按照字典顺序排序。排序后,原数组将被改变。
1. ['d', 'c', 'b', 'a'].sort() // ['a', 'b', 'c', 'd']
2.[4, 3, 2, 1].sort() // [1, 2, 3, 4]
3.[11, 101].sort() // [101, 11]
4. [10111, 1101, 111].sort() // [10111, 1101, 111]
上面代码的最后两个例子,需要特殊注意。sort方法不是按照大小排序,而是按照对应字符串的字典顺序排序。也就是说,数值会被先转成字符串,再按照字典顺序进行比较,所以101排在11的前面。
如果想让sort方法按照自定义方式排序,可以传入一个函数作为参数,表示按照自定义方法进行排序。该函数本身又接受两个参数,表示进行比较的两个元素。如果返回值大于0,表示第一个元素排在第二个元素后面;其他情况下,都是第一个元素排在第二个元素前面。
var arr = [10111, 1101, 111];
arr.sort(function (a, b) {
return a - b;
})
// [111, 1101, 10111]
var arr1 = [
{ name: "张三", age: 30 },
{ name: "李四", age: 24 },
{ name: "王五", age: 28 }
]
arr1.sort(function (o1, o2) {
return o1.age - o2.age;
})
// [
// { name: "李四", age: 24 },
// { name: "王五", age: 28 },
// { name: "张三", age: 30 }
// ]
10.map():参数是一个函数,对数组的所有成员依次调用一个函数,根据函数结果返回一个新数组。原数组不变。返回的是对原数组中的成员进行调用函数后的新数组。
var numbers = [1, 2, 3];
var arr1=numbers.map(function (n) {
return n + 1;
});
// arr1 = [2, 3, 4]
//numbers = [1, 2, 3]
上面代码中,numbers数组的所有成员都加上1,组成一个新数组返回,原数组没有变化。
11.filter():参数是一个函数,所有数组成员依次执行该函数,返回结果为true的成员组成一个新数组返回。该方法不会改变原数组。
var arr = [1, 2, 3, 4, 5]
arr.filter(function (elem) {
return (elem > 3);
})
// [4, 5],返回的是原数组中符合条件的成员
JS字符串常见用法
字符串
字符串就是一个或多个排列在一起的字符,放在单引号或双引号之中。
'abc'
"abc"
length属性
js里的字符串类似于数组,都是一个一个字符拼凑在一起组成的,因此可以用length属性取得字符串的长度
var str = "hello"
str.length; // 5
字符串常用的一些方法
1. charAt()
str.charAt(n)
=> 返回字符串的第n个字符,如果不在0~str.length-1之间,则返回一个空字符串。
var str = "javascript";
str.charAt(2); //'v'
str.charAt(12); //''
字符串的操作在js中非常频繁,也非常重要。以往看完书之后都能记得非常清楚,但稍微隔一段时间不用,便会忘得差不多,记性不好是硬伤啊。。。今天就对字符串的一些常用操作做个整理,一者加深印象,二者方便今后温习查阅。
String对象属性
(1) length属性
length算是字符串中非常常用的一个属性了,它的功能是获取字符串的长度。当然需要注意的是js中的中文每个汉字也只代表一个字符,这里可能跟其他语言有些不一样
var str = 'abc';
console.log(str.length);
(2) prototype属性
prototype在面向对象编程中会经常用到,用来给对象添加属性或方法,并且添加的方法或属性在所有的实例上共享。因此也常用来扩展js内置对象,如下面的代码给字符串添加了一个去除两边空格的方法:
String.prototype.trim = function(){
return this.replace(/^\s*|\s*$/g, '');
}
String对象方法
1.获取类方法
(1) charAt()
stringObject.charAt(index)
charAt()方法可用来获取指定位置的字符串,index为字符串索引值,从0开始到string.leng–1,若不在这个范围将返回一个空字符串。如
var str = 'abcde';
console.log(str.charAt(2)); //返回c
console.log(str.charAt(8)); //返回空字符串
(2) charCodeAt()
stringObject.charCodeAt(index)
charCodeAt()方法可返回指定位置的字符的Unicode编码。charCodeAt()方法与charAt()方法类似,都需要传入一个索引值作为参数,区别是前者返回指定位置的字符的编码,而后者返回的是字符子串。
var str = 'abcde';
console.log(str.charCodeAt(0)); //返回97
(3) fromCharCode()
String.fromCharCode(numX,numX,…,numX)
fromCharCode()可接受一个或多个Unicode值,然后返回一个字符串。另外该方法是String的静态方法,字符串中的每个字符都由单独的数字Unicode编码指定。
String.fromCharCode(97, 98, 99, 100, 101) //返回abcde
2.查找类方法
(1) indexOf()
stringObject.indexOf(searchvalue,fromindex)
indexOf()用来检索指定的字符串值在字符串中首次出现的位置。它可以接收两个参数,searchvalue表示要查找的子字符串,fromindex表示查找的开始位置,省略的话则从开始位置进行检索
var str = 'abcdeabcde';
console.log(str.indexOf('a')); // 返回0
console.log(str.indexOf('a', 3)); // 返回5
console.log(str.indexOf('bc')); // 返回1
(2) lastIndexOf()方法
stringObject.lastIndexOf(searchvalue,fromindex)
lastIndexOf()语法与indexOf()类似,它返回的是一个指定的子字符串值最后出现的位置,其检索顺序是从后向前。
var str = 'abcdeabcde';
console.log(str.lastIndexOf('a')); // 返回5
console.log(str.lastIndexOf('a', 3)); // 返回0从第索引3的位置往前检索
console.log(str.lastIndexOf('bc')); // 返回6
(3) search()方法
stringObject.search(substr)
stringObject.search(regexp)
search()方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。它会返回第一子字符个匹配的串的起始位置,如果没有匹配的,则返回-1。
var str = 'abcDEF';
console.log(str.search('c')); //返回2
console.log(str.search('d')); //返回-1
console.log(str.search(/d/i)); //返回3
(4) match()方法
stringObject.match(substr)
stringObject.match(regexp)
match()方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。
如果参数中传入的是子字符串或是没有进行全局匹配的正则表达式,那么match()方法会从开始位置执行一次匹配,如果没有匹配到结果,则返回null。否则则会返回一个数组,该数组的第0个元素存放的是匹配文本,除此之外,返回的数组还含有两个对象属性index和input,分别表示匹配文本的起始字符索引和stringObject的引用(即原字符串)。
var str = '1a2b3c4d5e';
console.log(str.match('h')); //返回null
console.log(str.match('b')); //返回["b", index: 3, input: "1a2b3c4d5e"]
console.log(str.match(/b/)); //返回["b", index: 3, input: "1a2b3c4d5e"]
如果参数传入的是具有全局匹配的正则表达式,那么match()从开始位置进行多次匹配,直到最后。如果没有匹配到结果,则返回null。否则则会返回一个数组,数组中存放所有符合要求的子字符串,并且没有index和input属性。
var str = '1a2b3c4d5e';
console.log(str.match(/h/g)); //返回null
console.log(str.match(/\d/g)); //返回["1", "2", "3", "4", "5"]
3.截取类方法
(1) substring()
stringObject.substring(start,end)
substring()是最常用到的字符串截取方法,它可以接收两个参数(参数不能为负值),分别是要截取的开始位置和结束位置,它将返回一个新的字符串,其内容是从start处到end-1处的所有字符。若结束参数(end)省略,则表示从start位置一直截取到最后。
var str = 'abcdefg';
console.log(str.substring(1, 4)); //返回bcd
console.log(str.substring(1)); //返回bcdefg
console.log(str.substring(-1)); //返回abcdefg,传入负值时会视为0
(2) slice()
stringObject.slice(start,end)
slice()方法与substring()方法非常类似,它传入的两个参数也分别对应着开始位置和结束位置。而区别在于,slice()中的参数可以为负值,如果参数是负数,则该参数规定的是从字符串的尾部开始算起的位置。
也就是说,-1指字符串的最后一个字符。
var str = 'abcdefg';
console.log(str.slice(1, 4)); //返回bcd
console.log(str.slice(-3, -1)); //返回ef
console.log(str.slice(1, -1)); //返回bcdef
console.log(str.slice(-1, -3)); //返回空字符串,若传入的参数有问题,则返回空
(3) substr()
stringObject.substr(start,length)
substr()方法可在字符串中抽取从start下标开始的指定数目的字符。其返回值为一个字符串,包含从stringObject的start(包括start所指的字符)处开始的length个字符。如果没有指定length,那么返回的字符串包含从start到stringObject的结尾的字符。另外如果start为负数,则表示从字符串尾部开始算起。
var str = 'abcdefg';
console.log(str.substr(1, 3)) //返回bcd
console.log(str.substr(2)) //返回cdefg
console.log(str.substr(-2, 4)) //返回fg,目标长度较大的话,以实际截取的长度为准
4.其他方法
(1) replace()方法
stringObject.replace(regexp/substr,replacement)
replace()方法用来进行字符串替换操作,它可以接收两个参数,前者为被替换的子字符串(可以是正则),后者为用来替换的文本。
如果第一个参数传入的是子字符串或是没有进行全局匹配的正则表达式,那么replace()方法将只进行一次替换(即替换最前面的),返回经过一次替换后的结果字符串。
var str = 'abcdeabcde';
console.log(str.replace('a', 'A'));
console.log(str.replace(/a/, 'A'));
如果第一个参数传入的全局匹配的正则表达式,那么replace()将会对符合条件的子字符串进行多次替换,最后返回经过多次替换的结果字符串。
var str = 'abcdeabcdeABCDE';
console.log(str.replace(/a/g, 'A')); //返回AbcdeAbcdeABCDE
console.log(str.replace(/a/gi, '$')); //返回$bcde$bcde$BCDE
(2) split()方法
stringObject.split(separator,howmany)
split()方法用于把一个字符串分割成字符串数组。第一个参数separator表示分割位置(参考符),第二个参数howmany表示返回数组的允许最大长度(一般情况下不设置)。
var str = 'a|b|c|d|e';
console.log((str.split(" ") )//空格用来分割每个英语单词
console.log(str.split('|')); //返回["a", "b", "c", "d", "e"]
console.log(str.split('|', 3)); //返回["a", "b", "c"]
console.log(str.split('')); //返回["a", "|", "b", "|", "c", "|", "d", "|", "e"]
也可以用正则来进行分割
var str = 'a1b2c3d4e';
console.log(str.split(/\d/)); //返回["a", "b", "c", "d", "e"]
(3) toLowerCase()和toUpperCase()
stringObject.toLowerCase()
stringObject.toUpperCase()
toLowerCase()方法可以把字符串中的大写字母转换为小写,toUpperCase()方法可以把字符串中的小写字母转换为大写。
var str = 'JavaScript';
console.log(str.toLowerCase()); //返回javascript
console.log(str.toUpperCase()); //返回JAVASCRIPT