— ซีรีส์เกี่ยวกับการใช้ "Ramda.js" ในการผลิตในโลกแห่งความเป็นจริง นี่เป็นบทความแรกของซีรีส์

เราต้องสร้างตัวเลือกสำหรับฟิลด์ 'เดือน' และฟิลด์ 'ปี'

สำหรับช่อง "เดือน" ควรมี 01, 02, 03, 04, …, 11, 12 โปรดสังเกตว่า 1 ~ 9 ควรอยู่ในรูปแบบ 01, 02, …, 09

สำหรับช่อง "ปี" ตัวเลือกควรเริ่มจากปีปัจจุบันไปจนถึง 10 ปีข้างหน้า และควรแปลงจาก 4 หลักเป็น 2 หลัก

เมื่อผู้ใช้ส่ง เราควรเชื่อมสองสายเข้าด้วยกัน

ความพยายามครั้งแรก

มาเริ่มต้นจากการสร้างตัวเลือกของเดือนกัน

ฉันนึกถึงฟังก์ชัน "เวลา" ของ Lodash โชคดีที่ Ramda มีฟังก์ชัน `เวลา` ของตัวเองเช่นกัน

(ตัวเลข → ก) → ตัวเลข → [a]

เรียกใช้ฟังก์ชันอินพุต n ครั้ง โดยส่งคืนอาร์เรย์ที่มีผลลัพธ์ของการเรียกใช้ฟังก์ชันเหล่านั้น

fn ถูกส่งผ่านหนึ่งอาร์กิวเมนต์: ค่าปัจจุบันของ n ซึ่งเริ่มต้นที่ 0 และค่อยๆ เพิ่มขึ้นเป็น n - 1

ตัวอย่าง:

R.times(R.identity, 5); //=>[0,1,2,3,4]

ยอดเยี่ยม! นั่นคือสิ่งที่เราต้องการอย่างแน่นอน!

R.times(R.identity, 12);

มันสร้าง [0, 1, 2, ..., 10, 11]

เราต้องเพิ่มรายการทั้งหมดในรายการด้วย 1

จากนั้นฟังก์ชันตัวอย่างที่ง่ายและธรรมดาที่สุดสำหรับการแนะนำ FP ก็มาเพื่อช่วยเหลือ มันคือฟังก์ชัน 'เพิ่ม'

R.times(R.add(1), 12);

ตอนนี้รายการของเรากลายเป็น [1, 2, 3, ..., 11, 12] ยอดเยี่ยม.

ท่ออาร์

ตอนนี้เราต้องการแปลง [1, 2, 3, ..., 11, 12] รายการตัวเลข เป็น ["01", "02", ..., "11", "12"] รายการสตริง

ฟังก์ชัน `ไปป์`

ดำเนินการจัดองค์ประกอบฟังก์ชันจากซ้ายไปขวา ฟังก์ชันซ้ายสุดอาจมีอาริตี้ ฟังก์ชั่นที่เหลือจะต้องเป็นแบบเอกภาค

ในบางไลบรารีฟังก์ชันนี้มีชื่อว่า sequence

แล้วเราจะใช้ฟังก์ชันนี้อย่างไร?

เพิ่ม (1) ==› toString ==› รูปแบบ

กลายเป็น

R.pipe(R.add(1), R.toString, format).

เขียนฟังก์ชัน format อย่างง่าย :

นำฟังก์ชันที่เรียบเรียงนี้ไปใช้กับฟังก์ชัน times:

R.times(R.pipe(R.add(1), R.toString, format), 12);

ในที่สุดเราก็ได้ ["01", "02", ..., "11", "12"] ! สมบูรณ์แบบ!

สำหรับสนามปี

มันดูคล้ายกัน มันค่อนข้างง่ายหลังจากที่เราได้เรียนรู้วิธีรับตัวเลือกฟิลด์เดือนแล้ว

เราสามารถเชื่อมค่าที่เลือกสองค่าเข้าด้วยกัน และส่งไปที่แบ็กเอนด์ทันที

{ "pan": "...", "cvv": "123", "expiry": month.concat(year) }

ขอบคุณสำหรับการอ่าน. ฉันจะเขียนเพิ่มเติมเกี่ยวกับ Ramda.js เนื่องจากช่วยได้จริงๆ และสามารถนำไปใช้ในการผลิตในโลกแห่งความเป็นจริงได้

ฉันพูดคุยเรื่อง Ramda.js กับเพื่อนร่วมงาน

Mr. N (หมกมุ่นอยู่กับ FP และ Ramda): format ควรเขียนเป็น:

R.ifElse(R.equals(str.length, 1), `0${str}`, str)

ฉัน: บางครั้งเราควรจะใช้ vanilla.js

นายร: …มันเป็นข้อความ