Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

ระยะทางที่สั้นที่สุดระหว่างวัตถุใน JavaScript


สมมุติว่าเรามีอ็อบเจ็กต์ของอาร์เรย์แบบนี้ -

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

เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับวัตถุหนึ่งของอาร์เรย์ดังกล่าว โปรดทราบว่าแต่ละวัตถุมีจุดระยะทางมากกว่าหนึ่งจุด แต่ควรเลือกเพียงจุดเดียวเพื่อรวมกับจุดระยะทางของวัตถุอื่น

เราสามารถรวมวัตถุสามชิ้นตามจุดระยะทางด้านบนได้ 12 วิธี

ตัวอย่างเช่น มันอาจจะกลายเป็น −

[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 ]