|
Функция не видит переменные
Добрый день, подскажите как правильно записать. Вот код:
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 выводит нормально, а вот внутри функции уже не видит их и получается, что на вход не подаются данные |
с этим разобрался, там я 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); } Как мне правильно записать, чтобы то число с функции можно было вывести после нее в цикле? |
Dark19,
так может вам и строку 5 перенести в конец 3 строки? |
Цитата:
console.log(i); выводит 24 четверки а когда console.log(j); выводит 24 нуля |
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) } |
спасибо, я б такое со своими знаниями в js не сделал
еще вопросик: можно ли передать координаты в обьект не как массив с двух элементов как сделано тут point: points[b]['point'], а в таком виде [47.6686,32.4040], но не строкой? Вот тут ymaps.route([centroids[a]['point'], points[b]['point']]) передаются именно так. |
Dark19,
не понял вопроса. |
не все нормально, это я неправильно выводил, спасибо еще раз
|
Цитата:
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} |
Dark19,
потому что асинхронность когда у сервера есть возможность тогда и отвечает - 1 запрос скажем обрабатывался 100ms а второй 10ms -- в результате ответ на второй пришёл быстрее ответа на первый. |
Часовой пояс GMT +3, время: 05:45. |
|