Find & Filter 方法的区别
find()
返回数组里通过测试函数(函数内判断,也就是符合条件)的
第一个元素的值
。如果不满足
测试函数,则返回undefined
。
⚠️ 返回的是一个符合条件的元素,不是新的数组。如果有相同的值,则返回第一个值
示例1
js
api.getTeaNewsListData(page).then(res => {
let arr = res.data;
this.dataInfo = arr.find(item => item.id == e.id)
});
代码解读
首先,通过接口返回了一个数组,数组里存在所有数据。由于后端给的接口不是带参的,不能通过带id去获取它的详情数据。
现在是需要获取属于当前页id里的详细数据,那么针对一个数组里去查找,方法很多,可以用遍历等等。这里用的是find(),函数里的判断条件给定id
相等,并且只返回符合条件的一个值,也就是数组里符合条件的第一条数据。
示例2
js
let users = [{
id:1,
name: 'John',
age: 22
}, {
id:2,
name: 'Tom',
age: 22
}, {
id:3,
name: 'Balaji',
age: 24
}];
//使用 find() 方法查找年龄大于 23 的第一个用户。
users.find(user => user.age > 23)
//{ id: 3, name: 'Balaji', age:24}
//要找到第一个年龄为 22 的用户
users.find(user => user.age === 22)
//{ id: 1, name: 'John', age:22}
filter()
用于对Array进行过滤,可以理解为有条件的筛选,然后返回符合要求的元素的新数组。返回值还是Array类型,只是元素做了改变。如果没有元素满足测试函数,则返回一个空数组。
示例
对数组进行筛选,只保留奇数
js
let arr = [1, 2, 4, 5, 6, 9, 10, 15];
let res = arr.filter( item =>
item % 2 !== 0
);
res // [1, 5, 9, 15]
区别
1. 如果符合条件
- find() 返回
第一个元素
- filter() 返回一个
包含符合条件元素的数组
2. 如果不满足条件
- find() 返回
undefined
- filter() 返回
空数组