просто просмотреть список один раз:
const getBounds = data =>
data.reduce(
([
{lat: minLat, lng: minLng},
{lat: maxLat, lng: maxLng}
],
{coords: [lat, lng]}
) =>
[
{
lat: Math.min(minLat, lat),
lng: Math.min(minLng, lng)
},
{
lat: Math.max(maxLat, lat),
lng: Math.max(maxLng, lng)
}
],
[{lat: Infinity, lng: Infinity}, {lat: -Infinity, lng: -Infinity}]
)
Я заранее согласен, что удобочитаемость здесь не является преимуществом.Но он проходит список только один раз.
Кроме того, после привыкания к деструктурированию синтаксиса становится ясно, что Math.max
и maxLng/maxLat
объединяются, чтобы уменьшить возможность использования неправильной переменной
[UPD], и нет необходимости использовать Infinity/-Infinity
в качестве начальных значений (я использовал их, чтобы выделить идею позади).для долготы / широты мы можем использовать 180/-180
в качестве наиболее экстремальных значений