Javascript
 Computer >> コンピューター >  >> プログラミング >> Javascript

JavaScriptのオブジェクト間の最短距離


このような配列のオブジェクトがあるとします-

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

そのような配列のオブジェクトを1つ取り込むJavaScript関数を作成する必要があります。各オブジェクトには複数の距離ポイントがありますが、他のオブジェクトの距離ポイントと組み合わせるには1つだけを選択する必要があることに注意してください。

上記の距離ポイントに基づいて、3つのオブジェクトを12の方法で組み合わせることができます。

たとえば、-

になる可能性があります
[0,3,5];

この場合、3つのオブジェクト間の合計距離は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 ]

  1. 配列内のJavaScriptオブジェクト間でメソッドを共有できますか?

    以下は、配列内のオブジェクト間でメソッドを共有するためのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <style>  

  2. JavaScriptのオブジェクトの同等性を説明します。

    JavaScriptでは、文字列、数値、ブール値などのプリミティブはそれらの値によって比較され、オブジェクト(ネイティブまたはカスタム)はそれらの参照によって比較されます。参照による比較とは、2つ以上のオブジェクトがメモリ内の同じ場所を指しているかどうかを意味します。 以下は、JavaScriptのオブジェクトの同等性を説明するコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name=&q