在 JavaScript 中,從陣列 A 的最後一個元素開始倒序計數,獲取陣列 B 的正確演算法是什麼?
考慮以下二進位制陣列(陣列 A):
const arr = [1,0,1,1,1,1,0,1,1];
當此陣列透過函式 sumRight() 處理時,它會產生以下輸出陣列(陣列 B):
const output = [1,0,4,3,2,1,0,2,1];
理解函式
陣列 arr 中的元素可以是 0 或 1。該函式從陣列 arr 的最後一個元素開始倒序計數,如果陣列 arr 中存在連續的 1,則輸出陣列中對應的元素將為 1,但對於陣列 arr 中的第二個連續的 1,它將為 2。對於輸入陣列中的第三個 1,輸出陣列中的元素將為 3,但對於陣列 arr 中的 0,輸出陣列中的元素也將為 0。
因此,讓我們使用 Array.prototype.reduceRight() 方法編寫此函式的程式碼,該方法與普通 reduce 方法的工作方式相同,只是它從右邊開始而不是從左邊開始:
示例
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 ]
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP