Rumah  >  Artikel  >  hujung hadapan web  >  Pilihan Penapisan dalam Effect-TS: Panduan Praktikal

Pilihan Penapisan dalam Effect-TS: Panduan Praktikal

王林
王林asal
2024-09-12 10:32:05413semak imbas

Filtering Options in Effect-TS: A Practical Guide

Effect-TS menyediakan pelbagai kaedah untuk menapis nilai dalam Opsyen, membolehkan anda menggunakan transformasi, predikat atau semakan pada nilai pilihan. Fungsi ini membantu memastikan bahawa hanya data yang berkaitan dikekalkan semasa membuang nilai Tiada atau yang tidak memenuhi syarat yang ditentukan. Dalam artikel ini, kami akan meneroka empat fungsi utama untuk menapis Pilihan: O.partitionMap, O.filterMap, O.filter dan O.exists.

Contoh 1: Membahagikan Pilihan dengan O.partitionMap

Konsep

Fungsi O.partitionMap membolehkan anda membahagikan Pilihan menjadi satu tuple dua Pilihan berdasarkan fungsi pemetaan yang mengembalikan Sama ada. Nilai Either.left dibahagikan kepada Pilihan pertama, manakala nilai Either.right masuk ke Pilihan kedua. Jika Pilihan asal ialah Tiada, kedua-dua partition adalah Tiada.

Kod

function filtering_ex01() {
  const some = O.some(1); // Create an Option containing the value 1
  const none = O.none(); // Create an Option representing no value
  const toEither = (n: number) => (n % 2 === 0 ? E.left(n) : E.right(n));

  console.log(pipe(some, O.partitionMap(toEither))); // Output: [None, Some(1)] (1 is odd, so it goes to the right)
  console.log(pipe(none, O.partitionMap(toEither))); // Output: [None, None] (since the Option is None)
}

Penjelasan

  • paip(some, O.partitionMap(toEither)): Memandangkan 1 adalah ganjil, fungsi toEither mengembalikan E.right(1), meletakkan 1 dalam Pilihan kedua, menghasilkan [None, Some(1) ].
  • paip(tiada, O.partitionMap(toEither)): Memandangkan Pilihan asal ialah Tiada, kedua-dua partition adalah Tiada, menghasilkan [Tiada, Tiada].

Fungsi ini berguna apabila anda perlu menggunakan pemetaan yang mengkategorikan nilai, sambil mengasingkannya kepada dua kumpulan—yang memenuhi syarat dan yang tidak.

Contoh 2: Pemetaan dan Penapisan dengan O.filterMap

Konsep

Fungsi O.filterMap menggunakan fungsi transformasi pada nilai di dalam Pilihan. Jika fungsi mengembalikan Some, nilai itu dikekalkan; jika ia mengembalikan Tiada, nilai itu ditapis keluar. Jika Pilihan asal ialah Tiada, hasilnya kekal Tiada.

Kod

function filtering_ex02() {
  const some = O.some(1); // Create an Option containing the value 1
  const none = O.none(); // Create an Option representing no value
  const toEven = (n: number) => (n % 2 === 0 ? O.some(n) : O.none());

  console.log(pipe(some, O.filterMap(toEven))); // Output: None (since 1 is not even)
  console.log(pipe(O.some(2), O.filterMap(toEven))); // Output: Some(2) (since 2 is even)
  console.log(pipe(none, O.filterMap(toEven))); // Output: None (since the original Option is None)
}

Penjelasan

  • paip(beberapa, O.filterMap(toEven)): Memandangkan 1 bukan genap, fungsi toEven mengembalikan Tiada dan hasilnya ialah Tiada.
  • paip(O.some(2), O.filterMap(toEven)): Nilai 2 adalah genap, jadi fungsi toEven mengembalikan Some(2), dan hasilnya ialah Some(2).
  • paip(tiada, O.filterMap(toEven)): Memandangkan Pilihan asal ialah Tiada, hasilnya kekal Tiada.

Fungsi ini berguna apabila anda ingin menukar dan menapis nilai di dalam Pilihan berdasarkan syarat tertentu.

Contoh 3: Menapis Pilihan dengan Predikat menggunakan O.filter

Konsep

Fungsi O.filter menyemak sama ada nilai di dalam Pilihan memenuhi predikat tertentu. Jika predikat berpuas hati, ia mengembalikan Pilihan asal; jika tidak, ia mengembalikan Tiada. Jika Pilihan asal ialah Tiada, ia kekal Tiada.

Kod

function filtering_ex03() {
  const some = O.some(1); // Create an Option containing the value 1
  const none = O.none(); // Create an Option representing no value
  const isEven = (n: number) => n % 2 === 0;

  console.log(pipe(some, O.filter(isEven))); // Output: None (since 1 is not even)
  console.log(pipe(O.some(2), O.filter(isEven))); // Output: Some(2) (since 2 is even)
  console.log(pipe(none, O.filter(isEven))); // Output: None (since the original Option is None)
}

Contoh 4: Menyemak Predikat dengan O.wujud

Konsep

Fungsi O.exists menyemak sama ada nilai di dalam Pilihan memenuhi predikat, mengembalikan benar jika ada dan palsu jika tidak. Jika Pilihan itu Tiada, ia mengembalikan palsu.

Kod

function filtering_ex04() {
  const some = O.some(1); // Create an Option containing the value 1
  const none = O.none(); // Create an Option representing no value
  const isEven = (n: number) => n % 2 === 0;

  console.log(pipe(some, O.exists(isEven))); // Output: false (since 1 is not even)
  console.log(pipe(O.some(2), O.exists(isEven))); // Output: true (since 2 is even)
  console.log(pipe(none, O.exists(isEven))); // Output: false (since the original Option is None)
}

Penjelasan

  • paip(some, O.exists(isEven)): Oleh kerana 1 tidak genap, predikat tidak berpuas hati, jadi hasilnya adalah palsu.
  • paip(O.some(2), O.exists(isEven)): Nilai 2 memenuhi predikat, jadi hasilnya benar.
  • paip(tiada, O.exists(isEven)): Memandangkan Pilihannya Tiada, hasilnya adalah palsu.

Fungsi ini berguna apabila anda memerlukan semakan pantas untuk menentukan sama ada nilai di dalam Pilihan memenuhi syarat tanpa mengubah atau menapis Pilihan itu sendiri.

Kesimpulan

Pilihan Penapisan dalam Effect-TS membolehkan pengendalian nilai pilihan yang fleksibel berdasarkan keadaan atau transformasi. Sama ada anda membahagikan nilai dengan O.partitionMap, menggunakan transformasi dengan O.filterMap, menyemak predikat dengan O.filter atau hanya mengesahkan keadaan dengan O.exists, alatan ini menyediakan kaedah yang mantap untuk mengawal cara Pilihan dikendalikan. Dengan menggunakan fungsi ini, anda boleh mengurus data pilihan dengan cekap, memastikan hanya nilai yang berkaitan disimpan atau diambil tindakan.

Atas ialah kandungan terperinci Pilihan Penapisan dalam Effect-TS: Panduan Praktikal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn