มีออบเจกต์ที่แต่ละคีย์มีอาร์เรย์ของจุดระยะทาง ต้องเลือกจุดหนึ่งจากแต่ละออบเจกต์ เพื่อให้ความต่างระหว่างค่าสูงสุดและต่ำสุดของจุดที่เลือกน้อยที่สุด
ตัวอย่าง: {obj1: [0,10], obj2: [3,9], obj3: [5,12,14]} → เลือก [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, 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 ]