Array 数组
# 归并方法
- reduce() 前往后遍历
- reduceRight() 从后往前遍历
let values = [1, 2, 3, 4, 5];
// reduce((上一个归并值, 当前项, 当前项索引, 数组本身)=>{return 结算值}, 起点值)
// 没有起点值
console.log(values.reduce((prev, cur, index, array) => prev + cur)); // 15
// 有起点值
console.log(values.reduce((prev, cur, index, array) => (prev + cur), 10)); // 25
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 迭代方法
- every() 每项返回true,该方法返回true
- filter() 返回true的项组成数组后返回
- forEach() 没有返回值
- map() 返回由每次函数调用结果构成的数组
- some() 有一项返回true,该方法返回true
let numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];
// every()
let everyResult = numbers.every((item, index, array) => item > 2);
console.log(everyResult); // false
// some()
let someResult = numbers.some((item, index, array) => item > 2);
console.log(someResult); // true
// filter
let filterResult = numbers.filter((item, index, array) => item > 2);
console.log(filterResult); // [3, 4, 5, 4, 3]
// map()
let mapResult = numbers.map((item, index, array) => item * 2);
console.log(mapResult); // [2, 4, 6, 8, 10, 8, 6, 4, 2]
// forEach()
numbers.forEach((item, index, array) => {
// 执行某些操作
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 查找元素
- indexOf()
- 前向后查找,返回查找元素位置,没找到返回-1
- lastIndexOf()
- 后向前查找,返回查找元素位置,没找到返回-1
- includes()
- 返回布尔值
- find()
- 接收两个参数,匹配到第一个结果后停止执行
- 参数(两个)
- 参数1:断言函数。断言函数接收3个参数:元素、索引、数组本身,找到一个就不再继续查找
- 参数2(可选): 指定断言函数内部this
- 返回值:
- 匹配到的第一个元素
- findIndex()
- find()使用方法一样,返回值为匹配到的第一个元素索引值,匹配到第一个结果后停止执行
const arr = ['刘', '关', '张'];
console.log(arr.indexOf('张')) // 2
console.log(arr.indexOf('曹')) // -1
console.log(arr.includes('刘')) // true
const people = [
{ name: "Matt", age: 27 },
{ name: "Nicholas", age: 29 }
];
// find()
console.log(people.find((element, index, array) => element.age < 28)); // {name: "Matt", age: 27}
// findIndex()
console.log(people.findIndex((element, index, array) => element.age < 28)); // 0
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 截取
1. slice() 返回截取的新数组
不改变原数组
2. splice() 可删除、插入、替换
改变原数组,返回删除元素
- 删除:传2个参数,参数1:开始位置,参数2:删除个数
- 插入:传3个参数,参数1:开始位置,参数2:0(要删除的数量),参数3:要插入的元素(可多个)
- 替换:传3个参数,参数1:开始位置,参数2:要删除元素数量,参数3:要插入的元素(可多个)
const arr = [1,2,3,4,5]
// 1. slice(开始,结束) 不包含结束位置
//slice创建一个新数组,不影响原数组
console.log(arr.slice(1,3)) // [2, 3]
// 2. splice()
const arr = [1,2,3,4,5]
// 删除
console.log(arr.splice(1,3)) // [2, 3, 4]
console.log(arr) // [1, 5]
// 插入
console.log(arr.splice(1, 0, 'liu', 'guan')) // []
console.log(arr) // [1, 5] // [1, "liu", "guan", 5]
// 替换
console.log(arr.splice(1, 2, 2, 3)) // ["liu", "guan"]
console.log(arr) // [1, 2, 3, 5]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 插入与移除
- push() 添加到末尾,返回数组最新长度,可一次添加多个
- unshift() 添加到开头,返回数组最新长度,可一次添加多个
- pop() 删除最后一项,返回被删除值
- shift() 删除第一项
const arr = ['刘', '关', '张'];
console.log(arr.push('赵', '孙')) // 5
console.log(arr.pop()) // "孙"
console.log(arr.shift()) // "刘"
console.log(arr.unshift('诸')) // 4
console.log(arr) // ["诸", "关", "张", "赵"]
1
2
3
4
5
6
2
3
4
5
6
# 排序
借用sort()实现排序
function compare(value1, value2) {
if (value1 < value2) {
return 1;
} else if (value1 > value2) {
return -1;
} else {
return 0;
}
}
let values = [4, 1, 19, 10, 15];
values.sort(compare);
console.log(values); // [19, 15, 10, 4, 1]
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# from()、of()
// 1. from() 将类数组转换为数组,字符串、Arguments对象、Map、Set等
console.log(Array.from("Matt")); // ["M", "a", "t", "t"]
// 2. of() 将一组参数转换为数组
console.log(Array.of(1, 2, 3, 4)); // [1, 2, 3, 4]
1
2
3
4
5
2
3
4
5
# 空位
// 空位
console.log(Array.from({length:3})) // [undefined, undefined, undefined]
1
2
2
# 填充
// fill(填充内容, 开始索引, 结束索引(不包含))
console.log(Array.from({length:3}).fill('张飞',1,2)) // [undefined, 张飞, undefined]
1
2
2
# 转换为字符串
// 1. toString()
const arr = ['刘', '关', '张'];
console.log(arr.toString()) // "刘,关,张"
// 2. join()
console.log(arr.join('-')) // "刘-关-张"
1
2
3
4
5
6
2
3
4
5
6
# 检测数组
if (Array.isArray(value)){
// 操作数组
}
1
2
3
2
3
编辑 (opens new window)
上次更新: 2022/08/28