filter将数组中的某些元素过滤掉,返回剩下的元素。
和map()类似,Array的filter()也接收一个函数。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是true还是false决定保留还是丢弃该元素。
例子:
(1)保留偶数
var arr=[2,3,4,4,6];
var result=arr.filter(function(s){
return s%2==0;
});
输出结果为
image.png
(2)把一个Array中的空字符串删掉
var arr=["a","",null,undefined,"c"];
var str=arr.filter(function(s){
return s && s.trim();
});
结果为:
image.png
回调函数
filter()接收的回调函数,其实可以有多个参数。通常我们仅使用第一个参数,表示Array的某个元素。回调函数还可以接收另外两个参数,表示元素的位置和数组本身。
var arr=['a','b','c'];
var r=arr.filter(function(element,index,self){
console.log("element="+element);
console.log("index="+index);
console.log("self="+self);
});
结果为
image.png
利用filter,可以巧妙地去除Array的重复元素:
var r, arr=['apple', 'strawberry', 'banana', 'pear', 'apple', 'orange', 'orange', 'strawberry'];
r=arr.filter(function(element,index,self){
return self.indexOf(element)===index;
});
结果为:
image.png
去除重复元素依靠的是indexOf总是返回第一个元素的位置,后续的重复元素位置与indexOf返回的位置不相等,因此被filter滤掉了。
分解数组
比如一个文件(words.txt)中有这样一句话:
the day is sunny the the
the sunny is is
目的是遍历出一个单词出现在次数
代码应该如下:
main() {
String words = read_file('words.txt')//获取文件内容
String[] wordArray = split(words)//对获取到的文件拆分
Map<String, Integer> frequency = group(wordArray)//遍历数组
sort(frequency)//分类
String output = format(frequency)
print(output)//输出
}