搜索(过滤)方法
# find
和findIndex
假如: 给定特定条件,如何寻找具有特定条件的对象?
这时可以用 arr.find (opens new window) 方法。
语法如下:
let result = arr.find(function(item, index, array) {
// 如果返回 true,则返回 item 并停止迭代
// 对于假值(falsy)的情况,则返回 undefined
});
1
2
3
4
2
3
4
依次对数组中的每个元素调用该函数:
item
是元素。index
是它的索引。array
是数组本身。
如果它返回 true
,则搜索停止,并返回 item
。如果没有搜索到,则返回 undefined
。
例如,我们有一个存储用户的数组,每个用户都有 id
和 name
字段。让我们找到 id == 1
的那个用户:
let users = [
{id: 1, name: "John"},
{id: 2, name: "Pete"},
{id: 3, name: "Mary"}
];
let user = users.find(item => item.id == 1);
alert(user.name); // John
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
在现实生活中,对象数组是很常见的,所以 find
方法非常有用。
注意在这个例子中,我们传给了 find
一个单参数函数 item => item.id == 1
。这很典型,并且 find
方法的其他参数很少使用。
arr.findIndex (opens new window) 方法(与 arr.find
方法)基本上是一样的,但它返回找到元素的索引,而不是元素本身。并且在未找到任何内容时返回 -1
。
# filter
find
方法搜索的是使函数返回 true
的第一个(单个)元素。
如果需要匹配的有很多,我们可以使用 arr.filter(fn) (opens new window)。
语法与 find
大致相同,但是 filter
返回的是所有匹配元素组成的数组:
let results = arr.filter(function(item, index, array) {
// 如果 true item 被 push 到 results,迭代继续
// 如果什么都没找到,则返回空数组
});
1
2
3
4
2
3
4
例如:
let users = [
{id: 1, name: "John"},
{id: 2, name: "Pete"},
{id: 3, name: "Mary"}
];
// 返回前两个用户的数组
let someUsers = users.filter(item => item.id < 3);
alert(someUsers.length); // 2
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
编辑 (opens new window)
上次更新: 2021/08/22, 01:09:59