Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

JavaScript에서 객체 사이의 최단 거리


다음과 같은 배열 개체가 있다고 가정해 보겠습니다.

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 ]