hurricanes = {
const hurricanes = [];
let i = 0;
while (i < lines.length) {
let [identifier, name, rows] = lines[i];
if (name === 'UNNAMED') name = '';
if (name) name = name[0] + name.slice(1).toLowerCase();
const max = { status: 'DB' };
for (let j = 1; j <= rows; j++) {
const [date, time, , status, latitude, longitude, maxWind] = lines[i + j];
const hour = Math.floor(parseInt(time) / 100);
const ts = new Date(
`${date.slice(0, 4)}-${date.slice(4, 6)}-${date.slice(6, 8)}T${
hour < 10 ? '0' + hour : hour
}:00Z`
);
if (statuses[status] > statuses[max.status]) max.status = status;
hurricanes.push({
identifier,
season: +identifier.slice(4, 8),
name,
status,
max,
ts,
latitude:
parseFloat(latitude) *
(latitude[latitude.length - 1] === 'N' ? 1 : -1),
longitude:
parseFloat(longitude) *
(longitude[longitude.length - 1] === 'E' ? 1 : -1),
maxWind: +maxWind,
last: j == rows
});
}
i += +rows + 1;
}
return hurricanes.sort((a, b) => a.ts - b.ts);
}