สมมุติว่าเรามีอ็อบเจ็กต์ของอาร์เรย์แบบนี้ -
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 ]