हमारे पास ऑब्जेक्ट की एक सरणी है:
const arr = [
{ value: 12, gap: 1 },
{ value: 13, gap: 1 },
{ value: 14, gap: 1 },
{ value: 15, gap: 1 },
{ value: 19, gap: 2 },
{ value: 21, gap: 1 },
{ value: 22, gap: 1 },
{ value: 23, gap: 1 },
{ value: 27, gap: 1 },
{ value: 31, gap: 4 },
{ value: 35, gap: 4 },
{ value: 39, gap: 4 },
{ value: 43, gap: 1 },
{ value: 50, gap: 1 },
{ value: 51, gap: 1 },
{ value: 52, gap: 1 },
{ value: 55, gap: 1 },
{ value: 57, gap: 1 },
];
हमें एक फ़ंक्शन लिखना है जो इस सरणी को लेता है और एक नई सरणी लौटाता है जहाँ वे सभी लगातार ऑब्जेक्ट जिनका मान पिछले ऑब्जेक्ट के मान और gap के योग के बराबर है, एक उप-सरणी में एक साथ समूहीकृत हों।
उदाहरण के लिए - मान 12 वाले ऑब्जेक्ट का gap 1 है और इसका अगला ऑब्जेक्ट मान 13 का है, इसलिए उन्हें समूहीकृत किया जाना चाहिए और उनके साथ मान 14 और 15 वाले ऑब्जेक्ट भी, और इसी तरह।
अब, समस्या समझने के बाद, आइए इस समस्या के लिए कोड लिखते हैं। हम वांछित सरणी का निर्माण करने के लिए Array.prototype.reduce() मेथड का उपयोग करेंगे:
उदाहरण
const arr = [
{ value: 12, gap: 1 },
{ value: 13, gap: 1 },
{ value: 14, gap: 1 },
{ value: 15, gap: 1 },
{ value: 19, gap: 2 },
{ value: 21, gap: 1 },
{ value: 22, gap: 1 },
{ value: 23, gap: 1 },
{ value: 27, gap: 1 },
{ value: 31, gap: 4 },
{ value: 35, gap: 4 },
{ value: 39, gap: 4 },
{ value: 43, gap: 1 },
{ value: 50, gap: 1 },
{ value: 51, gap: 1 },
{ value: 52, gap: 1 },
{ value: 55, gap: 1 },
{ value: 57, gap: 1 },
];
const groupArray = arr => {
return arr.reduce((acc, val, ind, array) => {
const { data, currentIndex } = acc;
const { value, gap } = val;
const v = arr[ind - 1]?.value;
const g = arr[ind - 1]?.gap;
if (ind === 0 || value !== v + g) {
const index = data.push([val]) - 1;
return { data, currentIndex: index };
}
data[currentIndex].push(val);
return { data, currentIndex };
}, {
data: [],
currentIndex: 0
}).data;
}
console.log(groupArray(arr));
आउटपुट
कंसोल में आउटपुट होगा:
[
[
{ value: 12, gap: 1 },
{ value: 13, gap: 1 },
{ value: 14, gap: 1 },
{ value: 15, gap: 1 }
],
[
{ value: 19, gap: 2 },
{ value: 21, gap: 1 },
{ value: 22, gap: 1 },
{ value: 23, gap: 1 }
],
[ { value: 27, gap: 1 } ],
[
{ value: 31, gap: 4 },
{ value: 35, gap: 4 },
{ value: 39, gap: 4 },
{ value: 43, gap: 1 }
],
[
{ value: 50, gap: 1 },
{ value: 51, gap: 1 },
{ value: 52, gap: 1 }
],
[ { value: 55, gap: 1 } ],
[ { value: 57, gap: 1 } ]
]