JavaScript中filter的用法实例分析
本文详细介绍JavaScript中Array的filter方法,通过保留奇数、去除空字符串、数组去重及筛选素数等实例,解析其回调函数参数与筛选逻辑,帮助开发者掌握该高阶函数的实际应用。
filter方法概述
本文通过具体实例解析JavaScript中filter方法的使用方式,供读者参考学习。
filter
filter是JavaScript中常用的数组操作方法,用于从数组中筛选出符合条件的元素,并返回由这些元素组成的新数组。
与map()类似,Array的filter()方法同样接收一个回调函数作为参数。与map()不同的是,filter()将回调函数依次作用于每个元素,并根据回调函数的返回值是true还是false来决定保留或丢弃该元素。
filter基础应用示例
例如,若需在一个数组中删除偶数,仅保留奇数,代码实现如下:
var arr = [1, 2, 4, 5, 6, 9, 10, 15];
var r = arr.filter(function (x) {
return x % 2 !== 0;
});
r; // [1, 5, 9, 15]
若需从一个数组中移除所有空字符串,代码实现如下:
var arr = ['A', '', 'B', null, undefined, 'C', ' '];
var r = arr.filter(function (s) {
return s && s.trim(); // 注意:IE9以下的版本没有trim()方法
});
r; // ['A', 'B', 'C']
由此可见,使用filter()这一高阶函数的核心在于正确编写“筛选”逻辑的回调函数。
回调函数参数详解
回调函数
filter()接收的回调函数实际上可以接收多个参数。通常我们只使用第一个参数,即数组中的某个元素。但回调函数还可以接收另外两个参数,分别表示该元素在数组中的索引位置以及数组本身:
var arr = ['A', 'B', 'C'];
var r = arr.filter(function (element, index, self) {
console.log(element); // 依次打印'A', 'B', 'C'
console.log(index); // 依次打印0, 1, 2
console.log(self); // self就是变量arr
return true;
});
数组去重实战
利用filter方法,可以巧妙地实现去除数组中重复元素的功能:
'use strict';
var
r,
arr = ['apple', 'strawberry', 'banana', 'pear', 'apple', 'orange', 'orange', 'strawberry'];
r = arr.filter(function (element, index, self) {
return self.indexOf(element) === index;
});
console.log(r.toString());
运行结果:
apple,strawberry,banana,pear,orange
去重逻辑依赖于indexOf方法始终返回元素第一次出现的位置索引。对于后续出现的重复元素,其索引与indexOf返回的索引不一致,因此会被filter过滤掉。
筛选素数案例
尝试使用filter()来筛选出素数:
'use strict';
function get_primes(arr) {
var i;
return arr.filter(function (element) {
var flag=true;
if(element<2){
flag=false;
}else {
for(var i=2;i<element;i++){
if (element%i==0){
flag=false;
break;
}
}
}
return flag;
});
}
// 测试:
var
x,
r,
arr = [];
for (x = 1; x < 100; x++) {
arr.push(x);
}
r = get_primes(arr);
if (r.toString() === [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97].toString()) {
console.log('测试通过!');
} else {
console.log('测试失败: ' + r.toString());
}
运行结果:
测试通过!
感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.jb51.net/code/HtmlJsRun测试上述代码运行效果。
PS:这里再为大家推荐一款JS数组遍历方式分析对比工具供大家参考:
在线JS常见遍历方式性能分析比较工具:http://tools.jb51.net/aideddesign/js_bianli
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript数组操作技巧总结》、《JavaScript遍历算法与技巧总结》、《javascript面向对象入门教程》、《JavaScript数学运算用法总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript错误与调试技巧总结》
希望本文所述对大家JavaScript程序设计有所帮助。
JS中将数组和对象混合组装为JSON字符串
2026-11-05 16:41:42
JS运算符优先级与结合性的区别是什么?
2026-11-05 13:22:02
JS Map怎么只遍历Key或Value
2026-11-05 13:00:36
D3.js 与 ECharts 选型对比:灵活性 vs 开发效率
2026-11-05 09:45:01
为什么JS中typeof []返回object:数组类型检测误区解析
2026-11-04 19:50:47
