Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

เทียบเท่ากับข้อเสียของ Ruby ใน JavaScript


each_cons() - ทับทิม

each_cons() method of enumerable เป็นวิธี inbuilt ใน Ruby ที่วนซ้ำสำหรับองค์ประกอบ N ที่ต่อเนื่องกันโดยเริ่มจากแต่ละองค์ประกอบทุกครั้ง หากไม่มีการบล็อก ระบบจะส่งคืนตัวแจงนับ

JS เทียบเท่ากับ each_cons()

สมมติว่าเรามีอาร์เรย์ของ Number literals (JS เทียบเท่ากับ enumerable ของ Ruby ในกรณีนี้) ฟังก์ชัน each_cons ควรจะเป็นฟังก์ชัน Array ที่ดำเนินการสำหรับแต่ละองค์ประกอบของอาร์เรย์ และยอมรับตัวเลข N (N <=ความยาวของอาร์เรย์) เป็น อาร์กิวเมนต์เท่านั้น และส่งคืนอาร์เรย์ที่มีอาร์เรย์ย่อยขนาด N โดยแต่ละอาร์เรย์ย่อยเริ่มจากองค์ประกอบทั้งหมดทีละรายการ

ตัวอย่างนี้จะทำให้ทุกอย่างชัดเจนขึ้นเล็กน้อย

สมมติว่าเรามีอาร์เรย์แบบนี้ -

const arr =[1, 2, 3, 4, 5];console.log(arr.eachCons(2));

สิ่งที่เรียกให้ eachCons นี้ทำคือ มันสร้างอาร์เรย์ของอาร์เรย์ที่มี 2 องค์ประกอบแต่ละอย่างนี้ -

[[1, 2], [2, 3], [3, 4], [4, 5]]

โปรดสังเกตว่าอาร์เรย์ย่อยถูกสร้างขึ้นสำหรับแต่ละองค์ประกอบของอาร์เรย์ดั้งเดิม จนกว่าเราจะทำได้

หากค่าของ N เป็น 3 แทนที่จะเป็น 2 ผลลัพธ์จะออกมาเป็น −

[[1, 2, 3], [2, 3, 4], [3, 4, 5]]

อีกครั้ง อาร์เรย์ย่อยจะถูกสร้างขึ้นสำหรับทุกองค์ประกอบของอาร์เรย์ จนกว่าเราจะมีองค์ประกอบเพียงพอในอาร์เรย์

แนวทาง

เราจะใช้อัลกอริธึมหน้าต่างบานเลื่อนเพื่อแก้ปัญหานี้

แม้ว่าเราจะสามารถใช้ฟังก์ชัน ES6 ที่ทันสมัยเพื่อแก้ปัญหานี้ในสองบรรทัด แต่แนวทางเดิมนั้นมีประสิทธิภาพมากเมื่อเทียบกับวิธีหลัง

ประการแรก เราจะใช้ a while loop ที่สร้างหน้าต่างเริ่มต้นของเราจากดัชนี 0 ถึง N แล้ว. เราจะใช้ for loop ซึ่งทำงานในขณะที่ส่วนท้ายของหน้าต่างยังน้อยกว่าความยาวของ originalarray

ลูปนี้จะตรวจสอบความเสถียรของหน้าต่างของเรา (เช่น ความยาวของหน้าต่างเท่ากับ N) หากหน้าต่างคงที่ เราจะใส่หน้าต่าง (อาร์เรย์ย่อยนั้นลงในอาร์เรย์ผลลัพธ์) ให้เลื่อนไปทางขวาตามระยะทางของหน่วย และ ยุบ (เช่น start =end) หากหน้าต่างไม่เสถียร เราจะทำการเพิ่มเติมองค์ประกอบเข้าไป

รหัสสำหรับวิธีนี้คือ −

ตัวอย่าง

const arr =[1, 2, 3, 4, 5];const eachCons =function(num){ ให้ res =[], temp =[]; ให้เริ่มต้น =0, สิ้นสุด =0; ในขณะที่(จบ  

ผลลัพธ์

ผลลัพธ์ในคอนโซลจะเป็น -

<ก่อน>[ [ 1 ], [ 2 ], [ 3 ], [ 4 ], [ 5 ] ][ [ 1, 2 ], [2, 3 ], [3, 4 ], [ 4, 5 ] ][ [1, 2, 3 ], [2, 3, 4 ], [3, 4, 5 ] ][ [ 1, 2, 3, 4 ], [2, 3, 4, 5 ] ]