निम्नलिखित बाइनरी सरणी (सरणी 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 ]