Прежде всего, я думаю, что ваш набор данных неправильно структурирован. Вы не можете смешивать данные парка с данными вида. Это основная причина того, что у вас возникла эта проблема. Также проверьте способ доступа к элементам, это можно сделать намного проще, чем с помощью цикла for. В любом случае, давайте оставим это в стороне, я прыгну, чтобы попытаться решить последнюю недостающую часть проблемы.
Предполагая, что у вас есть название парка (ов), который соответствует критериям, вы можете просто найти в массиве объектов его имя и вернуть его координаты:
function getParkLocationByName(parkName) {
let {latitude, longitude} = data.find(park => park.park_name === parkName);
return {latitude, longitude};
}
let coords = getParkLocationByName('Acadia National Park');
console.log(coords)
Обратите внимание, что «данные» в этом фрагменте кода ваш оригинальный JSON.
Это можно сделать разными способами, в зависимости от того, что вы пытаетесь оптимизировать (скорость, использование памяти, и т. д.).
ID pattern = ddd c 1 c [0]
Вариант 1 (по сути, как хеширование, аналогично заку):
1 Генерировать случайное число между 0 и числом возможностей (676k).
2- Преобразовать число в комбинацию
ddd = random / (26^2)
c[0] = random % (26)
c[1] = (random / 26) % 26
. 3- Запросить БД на наличие идентификатора и приращения, пока не будет найден свободный.
Вариант 2 (регистр сдвига с линейной обратной связью, см. wikipedia ):
1- Семя со случайным числом в диапазоне (0,676k). (Смотрите ниже, почему вы не можете посеять с '0')
2- Генерировать последующие случайные числа, применив следующее к текущему номеру ID
num = (num >> 1) ^ (-(num & 1u) & 0x90000u);
. 3- Пропустить идентификаторы, превышающие диапазон (то есть 0xA50A0 +)
4- Преобразовать номер в формат идентификатора (как указано выше)
* Вам нужно будет сохранить последнее сгенерированное число, использованное для идентификатора, но вам не нужно будет запрашивать БД, чтобы узнать, используется ли оно. Это решение будет перечислять все возможные идентификаторы, кроме [000 AA] из-за того, как работает LFSR.
[править] Так как ваш диапазон на самом деле больше, чем вам нужно, вы можете получить обратно [000 AA], вычтя 1, прежде чем конвертировать в ID и иметь ваш действительный диапазон (0,0xA50A0]
Использовать конечную группу. В основном, возьмите 32- или 64-разрядное целое число и найдите большое число, взаимно простое с максимальным значением для вашего целого числа; Назовите это число M. Тогда для всех целых чисел n, n * M приведет к уникальному номеру, который имеет много цифр.
Это имеет то преимущество, что вам не нужно предварительно заполнять базу данных или запускать отдельный запрос на выборку - вы можете сделать все это в одном операторе вставки, если ваш n
будет просто автоинкрементом и иметь отдельный столбец идентификатора, который по умолчанию равен n * M.
Вы можете сгенерировать случайный идентификатор, соответствующий этому стандарту, выбрать базу данных, чтобы увидеть, существует ли она уже, и вставить это в БД, чтобы отметить, что это было "использовано". В течение первых 25% срока службы этой схемы (или около 150 тыс. Записей) генерирование новых случайных идентификаторов должно быть относительно быстрым. Однако после этого потребуется больше и больше времени, и вы также можете предварительно заполнить таблицу, чтобы найти свободные идентификаторы.
В зависимости от того, что вы определяете как последовательный, вы можете просто выбрать определенную начальную точку на буквах, например, 'aa ', и просто переберите три цифры, так что это будет: 001aa 002aa 003aa
Как только вы доберетесь до zz, увеличьте числовую часть.