Заполните массив циклом for в JavaScript

0

Я пытаюсь получить область многоугольника с использованием JavaScript. Для этого мне нужно преобразовать точки долготы и широты в моем массиве JSON в декартовы координаты x и y. Этот цикл и функция преобразуют значение долготы в x для каждого значения долготы в массиве. Теперь мне нужно создать новый массив со всеми этими значениями. На данный момент он создает новый массив для каждого значения в массиве JSON. Вот результат в консоли:

[445.555480625]                                mapChoropleth.html:280
[1, 445.55897]                                 mapChoropleth.html:280
[2, 2: 445.62943062500005]                     mapChoropleth.html:280
[3, 3: 445.63478375]                           mapChoropleth.html:280
[4, 4: 445.64964499999996]                     mapChoropleth.html:280
[5, 5: 445.6483775]                            mapChoropleth.html:280
[6, 6: 445.61210562499997]                     mapChoropleth.html:280
[7, 7: 445.612394375]                          mapChoropleth.html:280
[8, 8: 445.6023443750001]                      mapChoropleth.html:280
[9, 9: 445.604339375]                          mapChoropleth.html:280
[10, 10: 445.571159375]                        mapChoropleth.html:280

Вот как я пытаюсь заполнить новый массив на данный момент:

for (var i=0;i<areaData.coordinates[0].length;i++){
        var lng = areaData.coordinates[0][i][1];
        var x = XLngToPixel(lng, '#map');
            function XLngToPixel(lng,elem){

                var array = new Array();
                var containerWidth=($(elem).width());
                    lng=lng+180;
                    array[i] = $(elem).offset().left+((lng*containerWidth)/360);
                return array;
            }
            console.log(YLatToPixel(lng, '#map'));
    }

Любая помощь приветствуется!

  • 1
    объявите массив снаружи для цикла и просто инициализируйте его внутри для цикла.
  • 0
    @codeSpy, как это будет иметь значение?
Показать ещё 5 комментариев
Теги:
arrays

1 ответ

1
Лучший ответ

Чтобы создать единый массив, содержащий ваши результаты, массив должен быть создан за пределами вашего цикла:

var array = new Array();
for (var i=0;i<areaData.coordinates[0].length;i++){
    var lng = areaData.coordinates[0][i][1];
    var x = XLngToPixel(lng, '#map');
        function XLngToPixel(lng,elem) {
            var containerWidth=($(elem).width());
            lng=lng+180;
            array[i] = $(elem).offset().left+((lng*containerWidth)/360);
            return array[i];
        }
        console.log(YLatToPixel(lng, '#map'));
}

Чтобы создать массивы lat и lng:

var lats = new Array();
var lngs = new Array();
for (var i=0;i<areaData.coordinates[0].length;i++){
    var lng = areaData.coordinates[0][i][1];
    var x = XLngToPixel(lng, '#map');
        function XLngToPixel(lng,elem) {
            var containerWidth=($(elem).width());
            lng=lng+180;
            lngs[i] = lng;
            lats[i] = $(elem).offset().left+((lng*containerWidth)/360);

            return lats[i];
        }
        console.log(YLatToPixel(lng, '#map'));
}

Это что-то вроде того, что вы ищете?

  • 0
    Подумайте об использовании массивов литералов [] и не создавайте функции внутри циклов.
  • 0
    Обе верные точки, я пытался помочь Миллиаму итерировать код вперед, а не дать им ответ из учебника!
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню