Computer >> Máy Tính >  >> Lập trình >> Javascript

Khoảng cách ngắn nhất giữa các đối tượng trong JavaScript


Giả sử, chúng ta có một đối tượng là các mảng như thế này -

const obj = {
   obj1: [ 0, 10 ],
   obj2: [ 3, 9 ],
   obj3: [ 5, 12, 14 ]
};

Chúng tôi được yêu cầu viết một hàm JavaScript nhận một đối tượng như vậy của mảng. Lưu ý rằng mỗi đối tượng có nhiều hơn một điểm khoảng cách, nhưng chỉ nên chọn một điểm để kết hợp với điểm khoảng cách của đối tượng khác.

Chúng ta có thể kết hợp ba đối tượng dựa trên các điểm khoảng cách ở trên theo 12 cách.

Ví dụ, nó có thể trở thành -

[0,3,5];

Trong trường hợp này, tổng khoảng cách giữa ba đối tượng sẽ là 5 - 0 là 5;

Hoặc nó có thể trở thành [10, 9, 5] và khoảng cách là -

10 − 5 = 5;

Sự kết hợp cũng có thể là [0, 3, 12] và khoảng cách là -

12 − 0 = 12;

Những gì chúng tôi dự định đạt được là tìm tổ hợp ngắn nhất, trong trường hợp này phải là [10,9, 12]; và khoảng cách là 12−9 =3;

Lưu ý rằng theo khoảng cách ngắn nhất, chúng tôi có nghĩa là sự khác biệt giữa phần tử lớn nhất và phần tử nhỏ nhất của nhóm.

Ví dụ

Mã cho điều này sẽ là -

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));

Đầu ra

Và đầu ra trong bảng điều khiển sẽ là -

[ 10, 9, 12 ]