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