Computer >> Hướng Dẫn 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 chứa các mảng như sau:

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

Chúng ta cần viết một hàm JavaScript nhận vào một đối tượng mảng như vậy. Lưu ý rằng mỗi đối tượng có nhiều điểm khoảng cách, nhưng chỉ một điểm được chọn để 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 = 5.

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

10 - 5 = 5;

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

12 - 0 = 12;

Mục tiêu của chúng ta là tìm tổ hợp ngắn nhất, trong trường hợp này nên là [10, 9, 12]; và khoảng cách là 12 - 9 = 3.

Lưu ý rằng khoảng cách ngắn nhất có nghĩa là hiệu giữa phần tử lớn nhất và nhỏ nhất của nhóm.

Ví dụ

Code cho việc 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, 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));

Kết quả

Kết quả hiển thị trong console sẽ là:

[ 10, 9, 12 ]