JavaScriptで連想配列の中から一番近い値を取り出す方法についてのメモです。
まず、以下のような連想配列があったとします。
const points: Point[] = [
{title: "A", lat: 35, lng: 135, zoomLevel: 5},
{title: "B", lat: 36, lng: 134, zoomLevel: 5},
{title: "C", lat: 37, lng: 135, zoomLevel: 5},
{title: "D", lat: 38, lng: 136, zoomLevel: 5},
{title: "E", lat: 39, lng: 135, zoomLevel: 5},
{title: "F", lat: 35.5, lng: 135.5, zoomLevel: 5}
]
そしてこの中から一番小さい値(例: lat)を見つけるには
const n = Math.min(...points.map((p)=>p.lat))
で可能。そして大きい値はMath.maxにするだけ。
ただし要素を返すのでなく数値のみ返すので、要素を返したいときは
const l = points.map((p)=>p.lat);
const n = points[l.indexOf(Math.min(...l))]
こうするのとかよさそう。
ちなみに一番近くの位置(c.lat, c.lngに)を取得したいときは
const l = points.map((p) => Math.sqrt(Math.pow(p.lat - c.lat, 2) - Math.pow(p.lng - c.lng, 2)))
const near = points[l.indexOf(Math.min(...l))]
こうなるということだ。(・_・)