JS中filter的用法


 簡介

filter()方法會創建一個新數組,原數組的每個元素傳入回調函數中,回調函數中有return返回值,若返回值為true,這個元素保存到新數組中;若返回值為false,則該元素不保存到新數組中;原數組不發生改變。

語法

  array.filter(function(currentValue,index,arr), thisValue)

  

 例子

  例如,在一個Array中,刪掉偶數,只保留奇數,可以這么寫:

1 var arr = [1, 2, 4, 5, 6, 9, 10, 15];
2 var r = arr.filter(function (x) {
3     return x % 2 !== 0;
4 });
5 r; // [1, 5, 9, 15]

把一個Array中的空字符串刪掉,可以這么寫:

1 var arr = ['A', '', 'B', null, undefined, 'C', '  '];
2 var r = arr.filter(function (s) {
3     return s && s.trim(); // 注意:IE9以下的版本沒有trim()方法
4 });
5 r; // ['A', 'B', 'C']

可見用filter()這個高階函數,關鍵在於正確實現一個“篩選”函數。

 

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的重復元素:

復制代碼
復制代碼
1 'use strict';
2 
3 var
4     r,
5     arr = ['apple', 'strawberry', 'banana', 'pear', 'apple', 'orange', 'orange', 'strawberry'];
6   r = arr.filter(function (element, index, self) {
7      return self.indexOf(element) === index;
8   });
9 console.log(r.toString());
復制代碼
復制代碼

運行結果:

apple,strawberry,banana,pear,orange

去除重復元素依靠的是indexOf總是返回第一個元素的位置,后續的重復元素位置與indexOf返回的位置不相等,因此被filter濾掉了。

嘗試用filter()篩選出素數:

復制代碼
復制代碼
 1 'use strict';
 2 
 3 function get_primes(arr) {
 4     var i;
 5     return arr.filter(function (element) {  
 6             var flag=true;  
 7             if(element<2){  
 8             flag=false;  
 9         }else {  
10             for(var i=2;i<element;i++){  
11                 if (element%i==0){  
12                     flag=false;  
13                     break;  
14                 }  
15             }  
16         }  
17         return flag;  
18     });
19 }
20 
21 // 測試:
22 var
23     x,
24     r,
25     arr = [];
26 for (x = 1; x < 100; x++) {
27     arr.push(x);
28 }
29 r = get_primes(arr);
30 if (r.toString() === [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97].toString()) {
31     console.log('測試通過!');
32 } else {
33     console.log('測試失敗: ' + r.toString());
34 }


其他:關於trim()的用法:
var str = " Runoob "; alert(str.trim());

輸出結果:

Runoob

定義和用法

trim() 方法用於刪除字符串的頭尾空白符,空白符包括:空格、制表符 tab、換行符等其他空白符等。

trim() 方法不會改變原始字符串。

trim() 方法不適用於 null, undefined, Number 類型。

瀏覽器支持

表格中的數字表示支持該屬性的第一個瀏覽器版本號。

方法          
trim() 10.0 9.0 3.5 5.0 10.5

語法

string.trim()

參數值

無。

返回值

類型 描述
String

返回移除頭尾空格的字符串。

技術細節

JavaScript 版本: ECMAScript 5

 


更多實例

實例

如果你的瀏覽器不支持 trim() 方法,你可以使用正則表達式來實現:

function myTrim(x) { return x.replace(/^\s+|\s+$/gm,''); } function myFunction() { var str = myTrim(" Runoob "); alert(str); }

輸出結果:

Runoob


免責聲明!

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



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