js中filter()函式,以及一些去重方法

cyccgirl發表於2018-08-27
filter():“篩選”函式。

filter()把傳入的函式依次作用於每個元素,然後根據返回值是true還是false決定保留還是丟棄該元素。 則我們可以運用到

 1、在一個Array中,刪掉偶數保留奇數: 

var arr = [1, 2, 4, 5, 6, 9, 10, 15]; 
var r = arr.filter(function (x) {
     return x % 2 !== 0; 
     }); 
console.log(r); // [1, 5, 9, 15] 
複製程式碼

 2、將Array中的空字串刪掉:

 var arr = ['A', '', 'B', null, undefined, 'C', ' ']; 
 var r = arr.filter(function (s) { 
     return s && s.trim(); // 注意:IE9以下的版本沒有trim()方法 
 }); 
 r; // ['A', 'B', 'C']
複製程式碼

 filter()接收的回撥函式,可以有多個引數。通常我們僅使用第一個引數,表示Array的某個元素。回撥函式還可以接收另外兩個引數,表示元素的位置和陣列本身:

1 var arr = ['A', 'B', 'C'];
2 var r = arr.filter(function (element, index, self) {
3     console.log(element); // 依次列印'A', 'B', 'C'
4     console.log(index); // 依次列印0, 1, 2
5     console.log(self); // self就是變數arr
6     return true;
7 });複製程式碼
利用filter,可以巧妙地去除Array的重複元素:
var r= [],
    arr = ['apple', 'strawberry','pear', 'apple', 'orange', 'orange', 'strawberry'];
    r = arr.filter(function (element, index, self) {
      return self.indexOf(element) === index;
   });
  console.log(r.toString()); //apple,strawberry,pear,orange複製程式碼
去除重複元素依靠的是indexOf總是返回第一個元素的位置,後續的重複元素位置與indexOf返回的位置不相等,因此被filter濾掉了。

當然去重有很多的方法,比如  :

1、Array.from(new Set(array));

2、let resultarr = [...new Set(arr)]; 

js中filter()函式,以及一些去重方法


相關文章