JS filter()方法:根據指定條件過濾陣列元素

2020-07-16 10:05:02
JavaScript filter() 方法可以返回陣列中滿足指定條件的元素。具體用法如下:

array.filter(callbackfn[, thisArg]);

引數說明:
  • array:必需引數,一個陣列物件。
  • callbackfn:必需引數,一個接收最多三個引數的函數。對於陣列中的每個元素,filter 方法都會呼叫 callbackfn 函數一次。
  • thisArg:可選引數,可在 callbackfn 函數中為其用 this 關鍵字的物件。如果省略 thisArg,則 undefined 將用作 this 值。

返回值是一個包含回撥函數為其返回 true 的所有值得新陣列。如果回撥函數為 array 的所有元素返回 false,則新陣列的長度為 0。

對於陣列中的每個元素,filter 方法都會呼叫 callbackfn 函數一次(採用昇序索引順序)。不為陣列中缺少的元素呼叫該回撥函數。回撥函數的用法與 map 相同。

除了陣列物件之外,filter 方法可由具有 length 屬性,且具有已按數位編製索引的屬性名的任何物件使用。

範例1

下面範例演示如何使用 filter 方法篩選出陣列中的素數。
function f (value, index, ar) {
    high = Math.floor(Math.sqrt(value)) + 1;
    for (var div = 2; div <= high; div ++) {
        if (value % div == 0) {
            return false;
        }
    return true;
}
var a = [31,33,35,37,39,41,43,45,57,49,51,53];
var a1 = a.filter(f);
console.log(a1);  //31,37,41,43,47,53

範例2

下面範例演示如何使用 filter 方法過濾掉陣列中在指定範圍外的元素。
var f = function (value) {
    if (typeof value !== 'number'){
        return false;
    } else {
        return value >= this.min && value <= this.max;
    }
}
var a = [6, 12, "15", 16, "the", -12];
var obj = {min : 10, max : 20};
var r = a.filter(f, obj);
console.log(r);  //12,16

範例3

下面範例演示如何使用 filter 方法過濾字串中每個單詞的首字母。
function f (value, index, ar) {
    if (index == 0) {
        return true;
    } else {
        return ar[index - 1] === " ";
    }
}
var a = "The quick brown fox jumps over the lazy dog.";
var subset = [].filter.call(a, f);
console.log(subset);  //T,q,b,f,j,o,t,l,d