Computer >> Máy Tính >  >> Lập trình >> Javascript

Thuật toán chính xác để lấy Mảng B từ Mảng A đếm ngược từ phần tử cuối cùng trong JavaScript nên là gì?

Hãy xem xét mảng nhị phân sau (Mảng A) -

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

Khi mảng này được truyền qua hàm, chẳng hạn sumRight (), nó tạo ra mảng đầu ra sau (Mảng B) -

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

Hiểu chức năng

Các phần tử trong mảng arr có thể là 0 hoặc 1. Hàm đếm ngược từ phần tử cuối cùng của mảng arr, nếu có các số 1 liên tiếp trong mảng arr thì phần tử tương ứng trong mảng theoutput sẽ là 1 nhưng đối với phần tử thứ 2 liên tiếp là 1 trong mảng arr , nó sẽ là 2. Đối với mảng ininput thứ 3, phần tử trong mảng đầu ra sẽ là 3, nhưng đối với 0 trong mảng arr, nó cũng sẽ là 0 trong mảng theoutput.

Vì vậy, hãy viết mã cho hàm này bằng cách sử dụng phương thức Array.prototype.reduceRight (), hoạt động giống như phương pháp rút gọn thông thường, nó chỉ bắt đầu từ bên phải thay vì bên trái -

Ví dụ

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));

Đầu ra

Đầu ra trong bảng điều khiển sẽ là -

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