一、数组Array
1. Array构造函数方法
Array.from
常用指数:两颗星
从类似数组或迭代器对象中构造函数,包括dom元素数组、集合Set、字典Map、arguments等等。
Array.isArray(arr)
判断arr
是否为数组,返回布尔值。
2. 原地修改数组方法
这些方法不会返回新数组
- 五颗星
(1)arr.push()
:向数组末尾添加一个或多个元素,添加多个元素要用展开语法arr.push(...[1,2,3])
(2)arr.pop()
:弹出末尾元素,并返回它 - 四颗星
(1)arr.reverse()
:反转数组
(2)arr.sort()
:排序数组,注意啦!默认的是按编码排序的,要想升序或降序排序,要添加函数参数,如arr.sort((a, b) => a-b)
是升序,换成arr.sort((a, b) => b-a)
是降序
(3)arr.shift()
:删除并返回第一个元素
(4)arr.splice(index, howmany, item1, item2, item3)
:增加、删除或替换某些元素,起始位置由index决定,多少个由howmany决定,item是要增加或替换成的元素,具体使用请看MDN文档的详细讲解。 - 三颗星
(1)arr.unshift()
:在数组开头增加一个或多个元素,并返回新长度,多个元素要用展开语法
(2)arr.fill(value, start, end)
:以value填充[start, end]
区间,可以用来创建二维数组,比如let arr= new Array(row).fill([])
3. 返回新数组的方法
返回新数组就说明如果你要使用修改后的结果,需要创建一个数组接收它。
- 四颗星
(1)arr.concat(otherArr)
:合并其它数组
(2)arr.join('-')
:以某种连接符拼接数组元素为字符串,常用的是空格' '
,即arr.join(' ')
,跟字符串的str.split()
是相反的一组运算
(3)arr.slice(hegin, end)
:截取数组区间,浅拷贝,注意这是前闭后开区间,即结果不包括end
对应元素
4. 遍历方法
遍历数组是经常会用到的,还有很多其它的有各色各样用处的遍历方法,以下只是经常用到的几个。
arr.map()
:传入函数,可以迭代对数组中的每个元素进行对应操作,最后返回操作好的新数组,要注意传入map
的函数必须有return
值,否则所有映射项都为undefined。
const arr1 = [1, 2, 3, 4];
const arr2 = arr1.map(item => item * 2);
// 要有return值
// const arr2 = arr1.map(item => {});
// console.log( arr2 );
// [ undefined, undefined, undefined, undefined ]
console.log( arr2 );
// [2, 4, 6, 8]
console.log( arr1 );
// [1, 2, 3, 4]
arr.forEach()
:遍历元素值或索引值,有局限性,不能continue或break。for(let index in arr)
:用索引值遍历数组。for(let value of arr)
:es6新增的遍历迭代对象数值的方法,Map、Set也可以用,这个直接遍历数组元素,而不是索引。
关于这些方法的区别,具体可以看这篇博文:javascript数组遍历
5. 获得索引方法
三颗星
arr.indexOf()
:返回某个元素第一次出现的位置,没有该元素返回-1
arr.lastIndexOf()
:返回某个元素最后一次出现的位置,没有该元素返回-1
arr.includes(val)
:判断数组中是否有val元素,返回布尔值
6.其他高阶函数
高阶函数是以函数为参数或返回函数,前文提到的map
、sort
就是常见的两个高阶函数。
Array.prototype.reduce(callback, initialValue)
回调函数callback有四个参数,累加器accumulator
存储累加结果(必须),当前值currentValue
(必需), 元素索引currentIndex
,数组本身array
。initialValue
是初始值,非必需。
// reduce 累加数组
// 无 initialValue,累加器初始值为 数组索引0位置
const arr = [0, 1, 2, 3, 4];
let sum = arr.reduce((accumulator, currentValue, currentIndex, array) => { return accumulator + currentValue });
console.log( sum );
// 10
// 有 initialValue,累加器初始值为 initialValue
let sum = arr.reduce((accumulator, currentValue, currentIndex, array) => { return accumulator + currentValue }, 10);
console.log( sum );
// 20
- Array.prototype.filter(callback)
判断数组中每个元素是否符合回调函数条件,为true保留元素到新数组中,否则舍弃元素,最后返回新数组。
// fliter数组去重
const arr1 = [1, 2, 1, 2, 3, 5, 4, 5, 3, 4, 4, 4, 4];
const arr2 = arr1.filter( (element, index, self) => {
return self.indexOf( element ) === index;
});
console.log( arr2 );
// [1, 2, 3, 5, 4]
console.log( arr1 );
// [1, 2, 1, 2, 3, 5, 4, 5, 3, 4, 4, 4, 4]
注意,回调函数中判断时只要return
值弱等于==true
即可。
二、字符串String
字符串的方法比较杂,不能按照像数组一样的块分类,因此这里就按照出现的频率排序总结,最前面的出现的频率高。
-
str.slice(start, end)
:截取字符串某段区域,返回新字符串 -
str.split()
:以指定字符或正则表达式分割字符串 -
str.substr(start, length)
:返回在指定位置开始的子字符串,也可加第二个参数length,指定子字符串长度 -
str.substring(start, end)
:返回两个下标之间的子字符串,不能为负数 -
str.trim()
:去掉字符串开始和结束的空格 -
str.indexOf()
:返回某个元素第一次出现的位置,没有该元素返回-1
-
str.lastIndexOf()
:返回某个元素最后一次出现的位置,没有该元素返回-1
-
str.includes(s)
:判断字符串中是否有子字符串s -
str.charAt(idx)
:返回特定位置的字符 -
str.charCodeAt(idx)
:返回表示给定索引的字符的Unicode的值 -
str.toLowerCase()
:将字符串转换成小写并返回 -
str.toUpperCase()
:将字符串转换成大写并返回 -
str.match(reg)
:使用正则表达式匹配字符串,返回匹配到的数组,关于match和正则表达式的用法,可参看我的另一篇博客:JavaScript正则表达式 -
str.replace(reg)
:正则表达式比较字符串,用新的子串替换被匹配的子串 -
str.search(reg)
:对正则表达式和指定字符串进行匹配搜索,返回第一个出现的匹配项的下标 -
str.concat()
:连接两个字符串文本,并返回新的字符串,并不常用,因为连接两个字符串文本可以直接使用+
,str1 + str2
-
str.endsWith(s)
:判断字符串是否以给定字符串结尾 -
str.startsWith(s)
:判断字符串是否以给定字符串开始