다음과 같은 배열 개체가 있다고 가정해 보겠습니다.
const obj = {
obj1: [ 0, 10 ],
obj2: [ 3, 9 ],
obj3: [ 5, 12, 14 ]
}; 우리는 그러한 배열 객체 중 하나를 취하는 JavaScript 함수를 작성해야 합니다. 각 개체에는 둘 이상의 거리 포인트가 있지만 다른 개체의 거리 포인트와 결합하려면 하나만 선택해야 합니다.
위의 거리 점을 기준으로 12가지 방법으로 3개의 개체를 결합할 수 있습니다.
예를 들어 -
가 될 수 있습니다.[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 ]