Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.05.2015, 17:36
Аспирант
Отправить личное сообщение для Dark19 Посмотреть профиль Найти все сообщения от Dark19
 
Регистрация: 29.04.2014
Сообщений: 82

Функция не видит переменные
Добрый день, подскажите как правильно записать. Вот код:
var centroids = [
            {
                object: "A",
                point: [50.4404,30.5582]
            },
            {
                object: "B",
                point: [49.3905,27.0426]
            },
            {
                object: "C",
                point: [48.4931,32.2721]
            },
            {
                object: "D",
                point: [49.5623,34.5573]
            }
        ];

        var points = [
            {
                point: [50.2153,29.5036]
            },
            {
                point: [50.3561,32.1842]
            },
            {
                point: [48.5515,29.5915]
            },
            {
                point: [47.6686,32.4040]
            },
            {
                point: [48.6972,35.7438]
            },
            {
                point: [47.1016,35.2604]
            }
        ];
    var distance = 0;
    var i =0;
    var j = 0;
$('#map').click(function(e) {
        for(i;i<centroids.length;i++){
            for(j;j<points.length;j++){
                ymaps.route([centroids[i]['point'], points[j]['point']]).then(function (router) {

                        distance = Math.round(router.getLength() / 1000);
                    });
            }
        }
});


До функции ymaps.route([centroids[i]['point'], points[j]['point']]) внутри цикла точки и i,j выводит нормально, а вот внутри функции уже не видит их и получается, что на вход не подаются данные
Ответить с цитированием
  #2 (permalink)  
Старый 30.05.2015, 18:02
Аспирант
Отправить личное сообщение для Dark19 Посмотреть профиль Найти все сообщения от Dark19
 
Регистрация: 29.04.2014
Сообщений: 82

с этим разобрался, там я j забыл обнулить после прохождения внутреннего цикла, но вот еще одна проблема: в переменную distance записывается число внутри функции, но после функции в цикле я его не могу вывести, потому что его уже нету. Вот код:
for(j;j<points.length;j++){
                ymaps.route([centroids[i]['point'], points[j]['point']]).then(function (router) {
                        distance = Math.round(router.getLength() / 1000);
                    });
                var result =
                {
                    mas: centroids[i]['object'],
                    point: points[j]['point'],
                    distance: distance
                };
                console.log(result);
            }


Как мне правильно записать, чтобы то число с функции можно было вывести после нее в цикле?
Ответить с цитированием
  #3 (permalink)  
Старый 30.05.2015, 18:30
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,135

Dark19,
так может вам и строку 5 перенести в конец 3 строки?
Ответить с цитированием
  #4 (permalink)  
Старый 30.05.2015, 18:34
Аспирант
Отправить личное сообщение для Dark19 Посмотреть профиль Найти все сообщения от Dark19
 
Регистрация: 29.04.2014
Сообщений: 82

Сообщение от рони Посмотреть сообщение
Dark19,
так может вам и строку 5 перенести в конец 3 строки?
тогда там i и j неправильно считает, когда пишу
console.log(i);

выводит 24 четверки
а когда
console.log(j);

выводит 24 нуля
Ответить с цитированием
  #5 (permalink)  
Старый 30.05.2015, 18:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,135

Dark19,
for(j;j<points.length;j++){
            (function(a, b) {
                ymaps.route([centroids[a]['point'], points[b]['point']]).then(function (router) {
                        distance = Math.round(router.getLength() / 1000);

                var result =
                {
                    mas: centroids[a]['object'],
                    point: points[b]['point'],
                    distance: distance
                };
                console.log(result);  });
            })(i,j)
            }
Ответить с цитированием
  #6 (permalink)  
Старый 30.05.2015, 18:48
Аспирант
Отправить личное сообщение для Dark19 Посмотреть профиль Найти все сообщения от Dark19
 
Регистрация: 29.04.2014
Сообщений: 82

спасибо, я б такое со своими знаниями в js не сделал
еще вопросик: можно ли передать координаты в обьект не как массив с двух элементов как сделано тут
point: points[b]['point']
, а в таком виде [47.6686,32.4040], но не строкой? Вот тут
ymaps.route([centroids[a]['point'], points[b]['point']])

передаются именно так.
Ответить с цитированием
  #7 (permalink)  
Старый 30.05.2015, 18:52
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,135

Dark19,
не понял вопроса.
Ответить с цитированием
  #8 (permalink)  
Старый 30.05.2015, 18:57
Аспирант
Отправить личное сообщение для Dark19 Посмотреть профиль Найти все сообщения от Dark19
 
Регистрация: 29.04.2014
Сообщений: 82

не все нормально, это я неправильно выводил, спасибо еще раз
Ответить с цитированием
  #9 (permalink)  
Старый 30.05.2015, 20:25
Аспирант
Отправить личное сообщение для Dark19 Посмотреть профиль Найти все сообщения от Dark19
 
Регистрация: 29.04.2014
Сообщений: 82

Сообщение от рони Посмотреть сообщение
Dark19,
for(j;j<points.length;j++){
            (function(a, b) {
                ymaps.route([centroids[a]['point'], points[b]['point']]).then(function (router) {
                        distance = Math.round(router.getLength() / 1000);

                var result =
                {
                    mas: centroids[a]['object'],
                    point: points[b]['point'],
                    distance: distance
                };
                console.log(result);  });
            })(i,j)
            }
это не столь важно, но все же интересно. Почему вывод идет не по порядку как идет цикл, а в разнобой?
Object {mas: "A", point: Array[2], distance: 143}
map.js:79 Object {mas: "A", point: Array[2], distance: 98}
map.js:79 Object {mas: "A", point: Array[2], distance: 276}
map.js:79 Object {mas: "C", point: Array[2], distance: 122}
map.js:79 Object {mas: "B", point: Array[2], distance: 264}
map.js:79 Object {mas: "D", point: Array[2], distance: 237}
map.js:79 Object {mas: "C", point: Array[2], distance: 247}
map.js:79 Object {mas: "D", point: Array[2], distance: 177}
map.js:79 Object {mas: "B", point: Array[2], distance: 272}
map.js:79 Object {mas: "A", point: Array[2], distance: 410}
map.js:79 Object {mas: "C", point: Array[2], distance: 370}
map.js:79 Object {mas: "A", point: Array[2], distance: 491}
map.js:79 Object {mas: "B", point: Array[2], distance: 526}
map.js:79 Object {mas: "C", point: Array[2], distance: 285}
map.js:79 Object {mas: "C", point: Array[2], distance: 394}
map.js:79 Object {mas: "D", point: Array[2], distance: 341}
map.js:79 Object {mas: "D", point: Array[2], distance: 358}
map.js:79 Object {mas: "A", point: Array[2], distance: 620}
map.js:79 Object {mas: "D", point: Array[2], distance: 434}
map.js:79 Object {mas: "B", point: Array[2], distance: 477}
map.js:79 Object {mas: "D", point: Array[2], distance: 485}
map.js:79 Object {mas: "C", point: Array[2], distance: 320}
map.js:79 Object {mas: "B", point: Array[2], distance: 828}
map.js:79 Object {mas: "B", point: Array[2], distance: 754}
Ответить с цитированием
  #10 (permalink)  
Старый 30.05.2015, 21:36
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,135

Dark19,
потому что асинхронность когда у сервера есть возможность тогда и отвечает - 1 запрос скажем обрабатывался 100ms а второй 10ms -- в результате ответ на второй пришёл быстрее ответа на первый.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
замыкания, почему функция не видит переменные ruvi Общие вопросы Javascript 5 31.05.2014 17:36
Индивидуальные переменные в each Spamol jQuery 6 08.12.2012 14:34
Callback функция и глобальные переменные drunia85 Events/DOM/Window 5 14.10.2012 03:06
Функция не меняет глобальные переменные, считая их локальными alex_oo7 Общие вопросы Javascript 2 13.10.2012 14:32
Функция и переменные wcb-falcon Общие вопросы Javascript 3 03.04.2012 23:44