map
执行遍历一个数组,把原数组内的每一项进行一系列操作,return
返回一个新数组,原数组不变,如果没有返回则得到一个所有值为undefined
的数组([undefined,undefined,undefined]
) map
方法不需要定义变量来接收最后的数组结果,本身这个方法运行后的结果就是新数组,这个方法也可进行判断,找到其中的一项,然后进行操作,再进行返回,就得到改变后的数组了。
js
const numbers = [1, 2, 3, 4, 5];
const doubledNumbers = numbers.map((num) => num * 2);
// doubledNumbers 为 [2, 4, 6, 8, 10]
map
的常用场景:
- 转换数组中的元素:
map
方法最常见的用法是根据数组中的每个元素进行转换,生成一个新的数组。 - 提取对象数组中的特定属性:如果数组中的元素是对象,可以使用
map
方法提取对象的特定属性,生成一个包含这些属性值的新数组。例如,从一个包含学生对象的数组中提取学生姓名。 - 处理异步操作:
map
方法也可以用于处理异步操作,例如对数组中的每个元素进行异步处理并返回一个包含处理结果的 Promise 数组。
js
const urls = ["url1", "url2", "url3"];
const fetchResults = urls.map(async (url) => {
const response = await fetch(url);
return response.json();
});
Promise.all(fetchResults).then((results) => {
// results 包含了所有请求的结果
});
reduce
这个方法被定义为数组的归并方法,这个方法和迭代方法(map,forEach,filter...)一样,都会对数组进行遍历,reduce与他们不同的是函数的第一个参数得到的是迭代计算后的效果,返回一个自定义的数据,对原数组不会产生操作 (多用于求和、求乘积、去重、数组转化为对象、映射过滤等等,真是个万金油方法)。
js
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((accumulator, currentValue) => {
return accumulator + currentValue;
}, 0);
// sum 为 15
reduce
的常用场景:
- 计算。
- 去重。
- 数组转化为对象:将数组转化为对象,通常用于处理键值对数据。
- 映射和筛选:可以结合条件判断,对数组进行映射和筛选操作。
filter
筛选到符合条件的所有数据对象 返回一个新数组(符合条件的所有项) ,不会改变原数组,这个方法本身运行后的结果就是一个筛选后的新数组
js
const numbers = [1, 2, 3, 4, 5];
// 将数组中大于等于 3 的元素过滤出来
const filtered = numbers.filter(function(num) {
return num >= 3;
});
console.log(filtered); // 输出 [3, 4, 5]
filter
的常用场景:
- 根据条件筛选列表数据,这是最常用的场景,根据自己的需要对原数组数据进行过滤
- 去除数组中的空值或无效值
- 去重,通过
filter
方法结合indexOf
或includes
方法,可以过滤掉数组中的重复元素。
find
筛选符合条件的第一个数据对象 返回的是符合条件的第一项的值 ,如果没有找到满足条件的元素,则返回 undefined
,find
不会改变原数组,这个方法本身运行后的结果就是得到的那一个数据项
js
const numbers = [1, 2, 3, 4, 5];
const foundNumber = numbers.find((element) => element > 3);
// foundNumber 为 4
find
的应用场景:
- 查找对象属性,
find
方法常用于从对象数组中查找具有特定属性值的对象,比如找到数组中id为2的数据。 - 处理数据不存在或不满足所需条件的情况,当
find
方法找不到满足条件的元素时,它会返回undefined
。可以利用这一点来处理找不到元素的情况。
every
返回这个数组全部都符合条件的bool值,全部匹配则返回真
js
const numbers = [1, 2, 3, 4, 5];
const allEven = numbers.every((element) => element % 2 === 0);
// allEven 为 false
every
的应用场景:
- 检查所有元素是否满足条件,当数组中的每个元素都满足条件时,
every
方法返回true
;否则返回false
。 - 判断空数组:当前为空数组时方法会返回true,但一般不用
every
判断,判断空数组一般用array.length
就可以了,严谨一点的话,可以结合Array.isArray()
方法来确定变量是否为数组类型。
some
返回这个数组部分符合条件的bool值,只要有有一个存在,则返回为真,需要注意的是,some
方法在找到满足条件的元素后会立即停止遍历,不会继续执行剩余元素的检查。
js
const array = [1, 2, 3, 4, 5];
const hasEvenNumber = array.some((element) => element % 2 === 0);
console.log(hasEvenNumber); // 输出: true
some
的应用场景:
- 检查数组中是否存在特定元素,可以使用
some
方法来检查数组中是否存在某个特定值或满足特定条件的元素。 - 权限控制:在权限控制逻辑中, 用
some
方法检查用户是否具有特定权限。 - 表单验证:在表单验证过程中,检查是否有任何字段未通过验证。