Cho mảng nhị phân (Array A):
const arr = [1, 0, 1, 1, 1, 1, 0, 1, 1];
Hàm sumRight() tạo Array B:
const output = [1, 0, 4, 3, 2, 1, 0, 2, 1];
Hiểu hàm
Đếm ngược từ cuối mảng: nếu có 1 liên tiếp, phần tử đầu tiên là 1, thứ 2 là 2, thứ 3 là 3... Nếu gặp 0 thì reset về 0.
Sử dụng Array.prototype.reduceRight():
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));Kết quả
Đầu ra trong console sẽ là:
[ 1, 0, 4, 3, 2, 1, 0, 2, 1 ]