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方法都會對數組所有元素進行一次轉換。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM