1. 程式人生 > >javascript中map和filter的區別

javascript中map和filter的區別

原生js中陣列可以直接通過map(),filter()函式來進行一次操作,他們分別是做一次統一對映,和一次過濾。說的更通俗一點,就是map函式之後,陣列元素個數不變,但是按照一定的條件轉換,陣列元素髮生了變化。filter函式之後,陣列元素個數可能發生了改變,但是陣列元素不會發生改變。

下面通過示例說明一下這兩個方法的用法。

map(function(item,index){

       return func(item);

});

filter(function(item,index){

      return func(item);

}):

示例中,給定一個數組,var arr = ["abc","aaa","bcd"],通過map函式,我們將他們轉大寫,然後通過filter函式,將A開頭的留下。

$(function(){	    
	var arr = ["abc","aaa","bcd"];
	console.log(arr);
	arr = arr.map(function(item,index){
	   console.log(item,index);
	   return String.prototype.toUpperCase.call(item);
	});
	console.log(arr);
	arr = arr.filter(function(item,index){
		console.log(item,index);
		return String.prototype.startsWith.call(item,"A");
	});
	console.log(arr);
});

執行結果,如下:

 

map,filter函式均有兩個引數item,index 分別是陣列元素的值和索引,我們一般對item進行轉換。

另外,jQuery也提供了map,filter方法,用法和原生的map,filter類似,只不過index,item引數位置和原生正好相反。

$(function(){	    
	var arr = ["abc","aaa","bcd"];
	arr = $(arr).map(function(index,item){
		console.log(index,item);
		return String.prototype.toUpperCase.call(item);
	}).filter(function(index,item){
		console.log(index,item);
		return String.prototype.startsWith.call(item,"A");
	});
	console.log(arr);
	arr = $.makeArray(arr);
	console.log(arr);
});

執行結果如下:

  

map,filter方法都會對陣列所有元素進行一次轉換。