原数组会改变的Function:
push/pop/unshift/shift/splice/reverse/sort/fill
-
Array.isArray(obj)
- 判断元素是否为数组类型数据
Array.isArray(arr) ---> true / false
-
Array.from(arrayLike, mapFn, thisArg)
- 将伪数组转成数组, 拥有length属性的都可以
- 可以将类似数组的对象 和 可遍历的对象 转换为真正的数组
- 可以设置第二个可选参数
mapFn
,让你可以在最后生成的数组上再执行一次方法后再返回 - 应用: 去重
let str = '12345'
Array.from(str) // [1, 2, 3, 4, 5]
Array.form(new Set([1, 2, 2, 3])) // [1, 2, 3]
[...new Set[1,2,2,3]] // [1, 2, 3]
Array.from(str, (value) => value + '1') // ['11', '21', '31', '41', '51']
-
arr.join(separator)
- 转字符串方法
- separator: 字符串, 将数组项分隔符号,
不传默认 ','
!!! - 返回拼接的字符串, 原数组不发生变化
let arr = [1,2,3,4,5]
arr.join() // '1,2,3,4,5'
arr.join('') // '12345'
-
arr.push()
1. 栈方法, 末尾插入, 可插入'多'个
2. 参数:(a, b) --- 插入的项值
3. 返回修改后的数组长度,原数组发生变化
let arr = [1,2,3]
arr.push(4, 5...) ---> 5(length)
arr ---> [1,2,3,4,5]
-
arr.pop()
1. 栈方法, 末尾移出一项
2. 无参数
3. 返回移出的项(是项的值),原数组发生变化
let arr = [1,2,3]
arr.pop() ---> 3
arr ---> [1,2]
-
arr.unshift()
1. 队列方法, 前端插入, 可插入'多'个
2. 参数:(a, b...) --- 插入的项值 【插入多个在前端,新数组排列顺序同参数顺序】
3. 返回修改后的数组长度, 原数组发生变化
let arr = [1,2,3]
arr.unshift(4, 5) ---> 5
arr ---> [5,4,1,2,3] !!!
-
arr.shift()
1. 队列方法, 前端移出一项
2. 无参数
3. 返回移出的项(是项的值), 原数组发生变化
let arr = [1,2,3]
arr.shift() ---> 1
arr ---> [2,3]
-
arr.concat()
1. 操作方法, 合并项 或 数组
2. 参数:(a, [b]...) --- 按顺序合并-构成新的数组
3. 返回合并后的新数组, 原数组不发生变化
let arr = [1,2,3]
arr.concat(4, [5]) ---> [1,2,3,4,5]
[...arr, 4, ...arr2] ---> [1,2,3,4,...arr2]
arr ---> [1,2,3]
-
arr.slice()
1. 操作方法, 截取数组连续项
2. 参数:(start, end) --- (1) (-1)[截取最后一位]
start: 必传, 起始位置, 负值-为倒叙位置(从-1往前-2、-3)
end: 非必传, 结束位置(不包含当前位置), 不传默认到数组结尾
start > end - 返回空数组
start/end 为负值 === +length 后的截取位置
3. 返回截取的【数组】, 原数组不发生变化
4. 应用:截取特定位置的数组项,可定位
let arr = [1,2,3,4]
arr.slice(1) ---> [2,3,4]
arr.slice(1, 3) ---> [2,3](不包含索引3)
arr.slice(-2, -1) ---> [3]( === (3, 4)(不包含索引-1/4)(截取倒数第二位))
-
arr.splice()
1. 操作方法, 修改原数组
2. 参数:(start, num, a...)
start: 必传, 起始位置, 负值-为倒叙位置
num: 非必传, 删除项的个数, 为0不删除, 不传删除起始位置到【结尾】
a... 非必传, 从当前位置插入的新项, 可多个
注意传参不与slice同,非开始位置与结束位置
3. 返回删除的项【数组】, 为删除时为空数组, 原数组发生变化
4. 应用:修改原数组
let arr = [1,2,3,4]
arr.splice(1) ---> [2,3,4]
arr ---> [1]
let arr = [1,2,3,4]
arr.splice(0, 2) ---> [1,2]
arr ---> [3,4]
let arr = [1,2,3,4]
arr.slice(1, 2, 5, 6) ---> [2,3]
arr ---> [1,5,6,4]
-
arr.reverse()
1. 重排序方法, 原数组倒序
2. 无参数
3. 返回倒序的数组, 原数组发生变化
let arr = [1,2,3,4]
arr.reverse() ---> [4,3,2,1]
arr ---> [4,3,2,1]
-
arr.sort()
1. 排序方法, 原数组按一定规则排序
2. 参数:(function)
function: 不传, 默认升序(从小到大--按【字符串的比较】, 即使是数字)
function(value1, value2) {}
A. 返回正数, 则当前value1 排在 value2 的后面
B. 返回负数, 则当前value1 排在 value2 的前面
C. 返回0, 则当前value1 与 value2 相等, 不排序
3. 返回特定规则排序的数组, 原数组发生变化
let arr = [1,2,10,4]
arr.sort() ---> [1,10,2,4]
arr.sort((value1, value2) => value1 - value2) ---> [1,2,4,10]
-
arr.indexOf()
1. 位置方法, 查找某个项【第一次出现】在数组中的索引
2. 参数:(a, index) 要查找的项 --- 判断依据是 【全等于(===)】
a: 要查找的项
index: 查找的起始位置(包含index), 不传,则从数组开始查起
3. 返回该项在数组中的索引,不在数组中则返回-1, 原数组不发生变化
let arr = [1,2,10,4,10]
arr.indexOf(10) ---> 2
arr.indexOf(10, 3) ---> 4
arr ---> [1,2,10,4,10]
-
arr.lastIndexOf()
1. 位置方法, 同上, 查找某个项【最后一次出现】在数组中的索引
2. index: 正常位置的索引, 然后往前查找
let arr = [1,2,10,4,10]
arr.lastIndexOf(10) ---> 4
arr.lastIndexOf(10, 3) ---> 2
arr ---> [1,2,10,4,10]
-
arr.includes() ES7
1. 位置方法, 判断数组是否包含该项
2. 参数:(a) ---> 需要判断的项值, 也是【全等于===】的判断
3. 返回true/false, 原数组不发生变化
let arr = [1,2,10,4,10]
arr.includes(10) ---> true
arr.includes(5) ---> false
arr ---> [1,2,10,4,10]
-
arr.find() ES6
1. 位置方法, 查找第一个符合条件的数组成员
2. 参数:(function --- 同遍历函数参数)
3. 返回第一个满足条件的数组项值, 若未找到则返回undefined 原数组不发生变化
let arr = [1,2,10,4,10]
arr.find((item, index, arr) => return item > 5) ---> 10
arr ---> [1,2,10,4,10]
-
arr.findIndex() ES6
1. 位置方法, 同上, 只是返回第一个满足条件的数组成员【索引】
2. 返回索引值, 未找到满足条件的则返回-1, 原数组不发生变化
3. 应用:与.indexOf() .lastIndexOf() .includes() 区别在于
4. 不是 查找已知道值的数组项 而是在一定范围或规则下 找满足条件的
5. 与 every() some() 参数相同, 区别在于 不是 不仅判断有没有满足条件的 而且还要返回对应条件的数组项或索引
let arr = [1,2,10,4,10]
arr.findIndex((item, index, arr) => return item > 5) ---> 2
arr ---> [1,2,10,4,10]
-
arr.map()
1. 迭代方法
2. 参数:(function - 通过 return 结果来组成新的数组)
3. function(item, index, arr) ----> 每一项/索引/数组对象本身
4. [arr] ---> 是原数组的浅拷贝,若在参数函数内对arr进行修改是可以改变原数组的,但不影响迭代
5. 返回与原数组一一对应的新数组(即长度相同), 原数组不发生变化
let arr = [1,2,3,4,5]
arr.map((item, index, arr) => {
return item + 1
}) ---> [2,3,4,5,6]
arr ---> [1,2,3,4,5]
-
arr.forEach()
1. 迭代方法
2. 参数:(function - 无返回值)
3. function(item, index, arr) ----> 每一项/索引/数组对象本身
4. 无返回值, 原数组不发生变化
5. 应用:相当于循环数组, 处理一些数组任务
let arr = [1,2,3,4,5]
arr.forEach((item, index, arr) => {
let str = item > 60 ? '及格' : '不及格'
}) ---> undefined
arr ---> [1,2,3,4,5]
-
arr.filter()
1. 迭代方法
2. 参数:(function - 通过 return true (非boolean型会转换后来判断是不是true) 来组成新的数组)
3. function(item, index, arr) ----> 每一项/索引/数组对象本身
4. 返回满足条件的新数组, 原数组不发生变化
5. 应用:用于对原数组的筛选
let arr = [1,2,3,4,5]
arr.filter((item, index, arr) => {
return item > 3
}) ---> [4,5]
arr.filter(item => return 2) ---> [1,2,3,4,5]( 2也是true 故所有项都是true 都返回 )
arr ---> [1,2,3,4,5]
!!!
[1, 0, null, undefined, false, 9, 7].filter(Boolean) ---> [1,9,7]
-
arr.every()
1. 迭代方法
2. 参数:(function)
3. function(item, index, arr) ----> 每一项/索引/数组对象本身
4. 返回true/false: 参数函数每一个项全返回true,则返回true,有一项返回非true则返回false, 原数组不发生变化
5. 应用:用于判断数组每一项是否满足条件
let arr = [1,2,3,4,5]
arr.every((item, index, arr) => {
return item > 3
}) ---> false (判断每一个项是否都是>3的)
arr.every((item, index, arr) => {
return item > 0
}) ---> true (判断每一个项是否都是>0的)
arr.filter(item => return 2) ---> true (2经过转换也是true故每一项都返回true, 则方法本身返回true)
arr ---> [1,2,3,4,5]
-
arr.some()
1. 迭代方法
2. 参数:(function)
3. function(item, index, arr) ----> 每一项/索引/数组对象本身
4. 返回true/false: 至少有一项满足条件 则返回true, 都不满足则返回false, 原数组不发生变化
5. 应用:用于判断数组是否至少有一项满足条件
let arr = [10,90,55,34,58]
arr.some((item, index, arr) => {
return item > 60
}) ---> true (判断是否至少有一个人及格)
arr ---> [1,2,3,4,5]
-
arr.reduce()
1. 归并方法
2. 参数:(function, initValue)
3. function(prev, cur, index, arr) ----> 前一项?/当前项/索引/数组对象本身
return ... 函数返回值会作为下一次遍历的第一个参数,而cur为当前遍历位置的项
4. initValue: 归并基础的初始值, 不传则 【prev 为遍历的第一项的值】
5. 返回:最后位置遍历的最后一项的函数返回值, 原数组不发生变化
6. 应用:累加器/计算数组中每个元素出现的次数
let arr = [1,2,3,4]
arr.reduce((prev, cur, index, arr) => {
return prev + cur
}) ---> 10
-
arr.reduceRight()
1. 归并方法
2. 同上, 只是遍历方向是从末尾开始, initValue不传 则第一次遍历 prev 为数组最后一项
3. 应用:累加器/计算数组中每个元素出现的次数
-
arr.fill() ES6
1. 填充方法
2. 参数:(target, start, end)
3. target: 必传, 待填充的元素(可为任意类型)
4. start: 非必传, 填充的开始位置, 默认从头开始
5. end: 非必传, 填充的结束位置(不包含该位置), 默认到数组结尾
5. 返回一个重新填充的新数组, 原数组发生变化并与新数组相同
6. 应用:用于给【初始化数组】赋初始值
let arr = [1,2,3,4]
arr.fill(5) ---> [5,5,5,5]
arr ---> [5,5,5,5]
arr.fill(0, 2, 3) ---> [5,5,0,5](不包含索引位置3)
new Array(5).fille(3) ---> [3,3,3,3,3]
Array.from({length: 5}).fill(3) ---> [3,3,3,3,3]