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

อัลกอริทึมที่ถูกต้องในการรับ Array B จาก Array A ควรนับถอยหลังจากองค์ประกอบสุดท้ายใน JavaScript คืออะไร


พิจารณาอาร์เรย์ไบนารีต่อไปนี้ (อาร์เรย์ A) -

const arr = [1,0,1,1,1,1,0,1,1];

เมื่ออาร์เรย์นี้ถูกส่งผ่านฟังก์ชัน ให้พูด sumRight() อาร์เรย์นี้จะสร้างเอาต์พุตอาร์เรย์ (Array B) ดังต่อไปนี้ -

const output = [1,0,4,3,2,1,0,2,1];

ทำความเข้าใจฟังก์ชัน

องค์ประกอบในอาร์เรย์ arr สามารถเป็นได้ทั้ง 0 หรือ 1 ฟังก์ชันนับถอยหลังจากองค์ประกอบสุดท้ายของอาร์เรย์ arr หากมี 1 ตัวติดต่อกันในอาร์เรย์ arr องค์ประกอบที่สอดคล้องกันในอาร์เรย์เอาต์พุตจะเป็น 1 แต่สำหรับ 1 ตัวที่ต่อเนื่องกันในอาร์เรย์ arr มันจะเป็น 2 สำหรับอาร์เรย์อินพุตที่ 3 องค์ประกอบในอาร์เรย์เอาต์พุตจะเป็น 3 แต่สำหรับ 0 ในอาร์เรย์ arr มันจะเป็น 0 ในอาร์เรย์เอาต์พุตเช่นกัน

เรามาเขียนโค้ดสำหรับฟังก์ชันนี้โดยใช้เมธอด Array.prototype.reduceRight() ซึ่งทำงานเหมือนกับวิธีการลดแบบปกติ โดยเริ่มจากด้านขวาแทนที่จะเป็นด้านซ้าย −

ตัวอย่าง

const arr = [1,0,1,1,1,1,0,1,1];
const sumRight = arr => {
   return arr.reduceRight((acc, val) => {
      const { prev, res } = acc;
      if(val === 0){
         return {
            prev: 0,
            res: res.concat(0)
         };
      };
      return {
         res: res.concat(val+prev),
         prev: prev+1
      };
   }, {
      prev: 0,
      res: []
   }).res.reverse();
};
console.log(sumRight(arr));

ผลลัพธ์

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

[
   1, 0, 4, 3, 2,
   1, 0, 2, 1
]