मान लीजिए, हमारे पास सरणियों का एक ऑब्जेक्ट है जैसे -
const obj = {
obj1: [0, 10],
obj2: [3, 9],
obj3: [5, 12, 14]
};हमें एक जावास्क्रिप्ट फ़ंक्शन लिखना है जो ऐसा ऑब्जेक्ट लेता है। ध्यान दें कि प्रत्येक ऑब्जेक्ट में एक से अधिक दूरी बिंदु हैं, लेकिन केवल एक को अन्य ऑब्जेक्ट के दूरी बिंदु के साथ जोड़ने के लिए चुना जाना चाहिए।
हम उपरोक्त दूरी बिंदुओं के आधार पर तीन ऑब्जेक्ट को 12 तरीकों से जोड़ सकते हैं। उदाहरण के लिए, यह बन सकता है -
[0, 3, 5];
इस मामले में, तीन ऑब्जेक्ट के बीच कुल दूरी 5 - 0 = 5 होगी। या यह [10, 9, 5] बन सकता है, और दूरी है -
10 - 5 = 5;
संयोजन [0, 3, 12] भी हो सकता है और दूरी है -
12 - 0 = 12;
हम जो हासिल करना चाहते हैं वह है सबसे छोटा संयोजन ढूंढना, जो इस मामले में [10, 9, 12] होना चाहिए; और दूरी 12 - 9 = 3 है।
ध्यान दें कि न्यूनतम दूरी से हमारा मतलब समूह के सबसे बड़े और सबसे छोटे तत्व के बीच का अंतर है।
उदाहरण
इसके लिए कोड होगा -
const obj = {
obj1: [0, 10],
obj2: [3, 9],
obj3: [5, 12, 14]
};
const findNearest = (obj = {}) => {
let parts = [undefined, undefined, undefined];
let i;
let res;
const data = Object
.values(obj)
.map((a, i) => a.map(v => [v, i]))
.reduce((a, b) => a.concat(b))
.sort((a, b) => a[0] - b[0] || a[1] - b[1]);
for (i = 0; i < data.length; i++) {
parts[data[i][1]] = data[i][0];
if (parts.some(v => v === undefined)) continue;
if (!res || Math.max(...parts) - Math.min(...parts) < Math.max(...res) - Math.min(...res)) {
res = parts.slice();
}
}
return res;
};
console.log(findNearest(obj));आउटपुट
कंसोल में आउटपुट होगा -
[ 10, 9, 12 ]