对于数组的高阶方法中map()和filter()这两个方法我一直是不太理解的,具体什么时候用map(),什么时候用filter(),今天就来看一下:
原生js中数组可以直接通过map(),filter()函数来进行一次操作,他们分别是做一次统一映射,和一次过滤。说的更通俗一点,就是map函数之后,数组元素个数不变,但是按照一定的条件转换,数组元素发生了变化。filter函数之后,数组元素个数可能发生了改变,但是数组元素不会发生改变。
示例中,给定一个数组,var arr = ["abc","aaa","bcd"],通过map函数,我们将他们转大写,然后通过filter函数,将A开头的留下。
var arr = ["abc","aaa","bcd"]; console.log(arr); // 此处打印arr这个数组 arr = arr.map(function(item,index){ // 用map()方法对数组进行操作 console.log(item,index); // 此处item代表数组中的每一个元素,index代表下标 return String.prototype.toUpperCase.call(item); //将数组中每一个元素转大写并返回 }); console.log(arr); // ["ABC","AAA","BCD"] arr = arr.filter(function(item,index){ // 用filter()操作数组 console.log(item,index); return String.prototype.startsWith.call(item,"A"); // 筛选出以字母A开头的元素并返回 }); console.log(arr); // ["ABC","AAA"]
注意:map不会改变原数组,map不会检查空数组 map()通过指定函数处理数组的每个元素,并返回处理后的数组。 filter()会根据函数中的筛选条件将返回符合条件的结果组成一个新的数组并返回。 也就是说当你要对原数组中元素进行改变处理时可以用map()方法,直接筛选符合条件的元素时可以用filter()。 注意:两个方法都不会改变原数组,只返回一个新的数组