— ซีรีส์เกี่ยวกับการใช้ "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
นายร: …มันเป็นข้อความ