admin 管理员组

文章数量: 887021


2023年12月19日发(作者:nbk联轴器)

js中filter方法

陃aScript语言中的filter()方法是一个非常常用的数组方法。它可以对数组中的每个元素进行筛选,只返回符合条件的元素,而不改变原数组。本文将详细介绍filter()方法的使用方法以及相关注意事项。

一、filter()方法的语法和用法

filter()方法的语法如下:

(callback[, thisArg])

其中,array是要进行筛选的数组,callback是回调函数,thisArg是可选参数,用来指定回调函数内部this的指向。

回调函数的语法如下:

function callback(element[, index[, array]]) {

// 返回一个布尔值,表示对element是否应该保留

}

其中,element表示数组中正在处理的元素,index表示该元素在数组中的索引,array表示正在处理的数组。

回调函数会对数组中的每个元素进行调用,如果回调函数返回true,则该元素被保留,否则被过滤掉。

下面的代码演示了如何使用filter()方法对数组进行筛选:

let arr = [1, 2, 3, 4, 5];

let filteredArr = (function(element) {

return element % 2 === 0;

- 1 -

});

(filteredArr); // [2, 4]

上述代码中,我们对数组arr进行了筛选,只保留了其中的偶数元素。最终得到的filteredArr数组只包含了2和4两个元素。

二、filter()方法的应用场景

filter()方法在实际开发中有很多应用场景。下面我们将介绍其中几个比较常见的场景。

1. 筛选出符合条件的元素

最常见的用法就是筛选出符合条件的元素。例如,我们可以通过filter()方法筛选出数组中所有大于等于10的元素:

let arr = [5, 10, 15, 20, 25];

let filteredArr = (function(element) {

return element >= 10;

});

(filteredArr); // [10, 15, 20, 25]

上述代码中,我们通过回调函数返回element >= 10来筛选出数组中所有大于等于10的元素。

2. 筛选出数组中的唯一元素

有时候我们需要从数组中筛选出唯一的元素,例如,我们可以通过filter()方法筛选出数组中所有不重复的元素:

let arr = [1, 2, 3, 2, 4, 3, 5];

let uniqueArr = (function(element, index, array)

- 2 -

{

return f(element) === index;

});

(uniqueArr); // [1, 2, 3, 4, 5]

上述代码中,我们通过回调函数返回f(element)

=== index来筛选出数组中所有不重复的元素。

3. 筛选出符合条件的对象

filter()方法不仅可以对数组中的基本数据类型进行筛选,还可以对数组中的对象进行筛选。例如,我们可以通过filter()方法筛选出所有年龄大于等于18岁的人:

let people = [

{ na 'Tom', age: 20 },

{ na 'Jerry', age: 16 },

{ na 'Alice', age: 18 },

{ na 'Bob', age: 22 }

];

let adults = (function(person) {

return >= 18;

});

(adults); // [{ na 'Tom', age: 20 }, { na 'Alice',

age: 18 }, { na 'Bob', age: 22 }]

上述代码中,我们通过回调函数返回 >= 18来筛选 - 3 -

出所有年龄大于等于18岁的人。

4. 筛选出符合条件的字符串

filter()方法还可以对字符串数组进行筛选。例如,我们可以通过filter()方法筛选出所有以字母a开头的字符串:

let arr = ['apple', 'banana', 'orange', 'avocado'];

let filteredArr = (function(str) {

return With('a');

});

(filteredArr); // ['apple', 'avocado']

上述代码中,我们通过回调函数返回With('a')来筛选出所有以字母a开头的字符串。

三、filter()方法的注意事项

在使用filter()方法时,需要注意以下几个问题。

1. 回调函数的返回值必须是一个布尔值

回调函数的返回值必须是一个布尔值,否则会导致程序出错。如果返回值是一个非布尔值,那么该值会被自动转换为布尔值。如果转换后的值为true,则该元素被保留,否则被过滤掉。

例如,下面的代码会把所有元素都保留下来:

let arr = [1, 2, 3, 4, 5];

let filteredArr = (function(element) {

return 'hello';

});

- 4 -

(filteredArr); // [1, 2, 3, 4, 5]

上述代码中,回调函数返回了一个字符串'hello',该值被转换为布尔值true,因此所有元素都被保留下来。

2. 回调函数内部的this指向问题

回调函数内部的this指向问题需要特别注意。如果不传入thisArg参数,那么回调函数内部的this指向undefined。如果传入了thisArg参数,那么回调函数内部的this指向该参数。

例如,下面的代码演示了如何使用thisArg参数指定回调函数内部的this指向:

let obj = {

na 'Tom',

age: 20

};

let arr = [1, 2, 3, 4, 5];

let filteredArr = (function(element) {

return >= element;

}, obj);

(filteredArr); // [1, 2, 3, 4, 5]

上述代码中,我们通过传入obj参数来指定回调函数内部的this指向。在回调函数内部,表示obj对象的age属性。

3. 对于稀疏数组,filter()方法会跳过未定义的元素

如果数组中存在未定义的元素(即稀疏数组),filter()方法会 - 5 -

跳过这些元素,不会调用回调函数。例如,下面的代码演示了如何使用filter()方法对稀疏数组进行筛选:

let arr = [1, 2, , 4, 5];

let filteredArr = (function(element) {

return element % 2 === 0;

});

(filteredArr); // [2, 4]

上述代码中,第三个元素是未定义的,filter()方法跳过了该元素,只对其他元素进行了筛选。

四、总结

本文详细介绍了JavaScript语言中的filter()方法的使用方法和相关注意事项。filter()方法可以对数组中的每个元素进行筛选,只返回符合条件的元素,而不改变原数组。在实际开发中,filter()方法有很多应用场景,例如筛选出符合条件的元素、筛选出数组中的唯一元素、筛选出符合条件的对象等。在使用filter()方法时,需要注意回调函数的返回值必须是一个布尔值,回调函数内部的this指向问题,以及对于稀疏数组,filter()方法会跳过未定义的元素。

- 6 -


本文标签: 筛选 数组 元素 函数