如何在 TypeScript 中過濾陣列中的值?


在本教程中,使用者將學習如何在 TypeScript 中過濾陣列中的值。過濾是操作我們從資料庫獲取的資料的重要操作。

例如,每個人都見過 Amazon、Flipkart 等網站上的過濾器,用於根據不同的條件過濾產品。要建立類似的功能,我們可以直接從資料庫獲取過濾後的資料,或者獲取所有資料並在前端從產品陣列中進行過濾,這取決於一些條件,例如資料庫大小、效能等。

使用 Array.filter() 方法

陣列的 filter() 方法允許我們根據某些單一或多個條件過濾陣列中的不同值。它將回調函式作為引數。使用者可以在回撥函式中為每個陣列元素執行某些條件。如果回撥函式對特定元素返回 true,則 filter() 方法將該元素包含在結果陣列中。

語法

使用者可以按照以下語法使用 filter() 方法過濾陣列中的值。

let array: Array<number> = [10, 20, 30, 54, 43, 32, 90, 80];
let result: Array<number> = array.filter(callback_func(element, index, array) {
   // condition to filter values
});

在上述語法中,我們建立了陣列並透過引用陣列呼叫 filter 方法。

引數

  • callback_func − 它是一個包含過濾陣列值的條件的函式。回撥函式的條件根據當前元素是否匹配條件返回布林值。

  • element − 它是一個數組元素。

  • index − 它是一個元素的索引。

  • array − 它是一個我們應用 filter() 方法的當前陣列。

示例 1

在下面的示例中,我們建立了一個數字陣列。我們希望過濾陣列中所有能被 10 整除的值。在 filter 方法中,我們傳遞了箭頭函式作為回撥,如果當前元素能被 10 整除則返回 true。否則,返回 false。

結果陣列將包含回撥函式條件為 true 的所有元素,使用者可以在輸出中觀察到。

let array: Array<number> = [10, 20, 30, 54, 43, 32, 90, 80];
// Filter the all values which are divisible by 10.
let result: Array<number> = array.filter(
   //  arrow function as a callback function
   (element, index, array) => {
      // If element is divided by 10, return true else return false.
      if (element % 10 == 0) {
         return true;
      }
      return false;
   }
);
console.log("All filtered values are " + result);

編譯後,它將生成以下 JavaScript 程式碼:

var array = [10, 20, 30, 54, 43, 32, 90, 80];
// Filter the all values which are divisible by 10.
var result = array.filter(
//  arrow function as a callback function
function (element, index, array) {
   // If element is divided by 10, return true else return false.
   if (element % 10 == 0) {
      return true;
   }
   return false;
});
console.log("All filtered values are " + result);

輸出

以上程式碼將產生以下輸出:

All filtered values are 10,20,30,90,80

示例 2

在下面的示例中,我們建立了一個物件陣列,其中包含名稱和程式語言作為成員。之後,我們使用 filter 方法過濾陣列中的物件,這些物件包含“c++”作為程式語言。

接下來,我們遍歷“CppTutors”陣列以列印所有包含語言為“c++”的物件。

// Array of objects containing the name, and programming language
let tutors: Array<{ name: string; language: string }> = [];
// Push some records to the array
tutors.push({ name: "Jems", language: "C++" });
tutors.push({ name: "Bond", language: "Python" });
tutors.push({ name: "Trump", language: "C++" });
tutors.push({ name: "Alice", language: "Java" });
tutors.push({ name: "Nerd", language: "C" });
//  Filter all the CPP tutors.
const Cpptutors = tutors.filter((tutor, index) => {
   return tutor.language == "C++";
});
// Printe the name of all CPP tutors.
for (let tutor of Cpptutors) {
   console.log(tutor.name + " is a CPP tutor.");
}

編譯後,它將生成以下 JavaScript 程式碼:

// Array of objects containing the name, and programming language
var tutors = [];
// Push some records to the array
tutors.push({ name: "Jems", language: "C++" });
tutors.push({ name: "Bond", language: "Python" });
tutors.push({ name: "Trump", language: "C++" });
tutors.push({ name: "Alice", language: "Java" });
tutors.push({ name: "Nerd", language: "C" });
//  Filter all the CPP tutors.
var Cpptutors = tutors.filter(function (tutor, index) {
   return tutor.language == "C++";
});
// Printe the name of all CPP tutors.
for (var _i = 0, Cpptutors_1 = Cpptutors; _i < Cpptutors_1.length; _i++) {
   var tutor = Cpptutors_1[_i];
   console.log(tutor.name + " is a CPP tutor.");
}

輸出

以上程式碼將產生以下輸出:

Jems is a CPP tutor.
Trump is a CPP tutor.

自定義演算法過濾陣列值

在這種方法中,我們將簡單地遍歷陣列的每個元素。對於每個元素,我們將檢查該元素是否滿足過濾條件,如果滿足,我們將將其推入過濾陣列。

語法

使用者可以按照以下語法使用自定義演算法過濾陣列值。

// Iterate through every element of the array.
for (let i = 0; i < array.length; i++) {
   // condition to filter values.
   if () {
   // if the condition meets, push the element to filteredValues array.
      filteredValues.push(array[i]);
   }
}

演算法

使用者可以按照以下演算法執行上述語法。

步驟 1 − 建立陣列以儲存過濾後的值。

步驟 2 − 使用 for 迴圈遍歷每個陣列元素。

步驟 3 − 如果過濾條件滿足元素,則將其推入過濾陣列。

步驟 4 − 過濾後的陣列包含滿足過濾條件的每個值。

示例

在下面的示例中,我們建立了一個年齡陣列。簡單來說,我們應用了上述演算法來過濾所有大於 18 歲的年齡。

// Array of ages
let ages: Array<number> = [32, 12, 34, 54, 65, 76, 21, 11, 4, 34, 32];
// array to store all ages above 18
let above18: Array<number> = [];
// Iterate through ages and filter all ages above 18.
for (let i = 0; i < ages.length; i++) {
   if (ages[i] > 18) {
      // push all ages, which are above 18 to above18 array.
      above18.push(ages[i]);
   }
}

// Print all ages above 18.
console.log("All ages above 18.");
console.log(above18);

編譯後,它將生成以下 JavaScript 程式碼:

// Array of ages
var ages = [32, 12, 34, 54, 65, 76, 21, 11, 4, 34, 32];
// array to store all ages above 18
var above18 = [];
// Iterate through ages and filter all ages above 18.
for (var i = 0; i < ages.length; i++) {
   if (ages[i] > 18) {
      // push all ages, which are above 18 to above18 array.
      above18.push(ages[i]);
   }
}
// Print all ages above 18.
console.log("All ages above 18.");
console.log(above18);

輸出

以上程式碼將產生以下輸出:

All ages above 18.
[ 32, 34, 54, 65, 76, 21, 34, 32 ]

在本教程中,使用者學習瞭如何在 Typescript 中過濾值。在第一個示例中,使用者學習瞭如何使用 filter 方法過濾陣列中的值。此外,使用者還學習瞭如何使用 filter 方法根據成員值過濾物件。

最後,我們建立了自定義演算法來過濾值,這也展示了 filter() 方法如何在 Array 類中實現。

更新於: 2022年12月16日

11K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.