다음과 같은 배열 개체가 있다고 가정해 보겠습니다.
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 ]