![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
29.05.2015, 17:36
|
Аспирант
|
|
Регистрация: 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 выводит нормально, а вот внутри функции уже не видит их и получается, что на вход не подаются данные
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
30.05.2015, 18:02
|
Аспирант
|
|
Регистрация: 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);
}
Как мне правильно записать, чтобы то число с функции можно было вывести после нее в цикле?
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
30.05.2015, 18:30
|
![Аватар для рони](https://javascript.ru/forum/image.php?u=7416&dateline=1372796129) |
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,135
|
|
Dark19,
так может вам и строку 5 перенести в конец 3 строки?
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
30.05.2015, 18:34
|
Аспирант
|
|
Регистрация: 29.04.2014
Сообщений: 82
|
|
Сообщение от рони
|
Dark19,
так может вам и строку 5 перенести в конец 3 строки?
|
тогда там i и j неправильно считает, когда пишу
console.log(i);
выводит 24 четверки
а когда
console.log(j);
выводит 24 нуля
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
30.05.2015, 18:39
|
![Аватар для рони](https://javascript.ru/forum/image.php?u=7416&dateline=1372796129) |
Профессор
|
|
Регистрация: 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)
}
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
30.05.2015, 18:48
|
Аспирант
|
|
Регистрация: 29.04.2014
Сообщений: 82
|
|
спасибо, я б такое со своими знаниями в js не сделал
еще вопросик: можно ли передать координаты в обьект не как массив с двух элементов как сделано тут
point: points[b]['point']
, а в таком виде [47.6686,32.4040], но не строкой? Вот тут
ymaps.route([centroids[a]['point'], points[b]['point']])
передаются именно так.
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
30.05.2015, 18:52
|
![Аватар для рони](https://javascript.ru/forum/image.php?u=7416&dateline=1372796129) |
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,135
|
|
Dark19,
не понял вопроса.
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
30.05.2015, 18:57
|
Аспирант
|
|
Регистрация: 29.04.2014
Сообщений: 82
|
|
не все нормально, это я неправильно выводил, спасибо еще раз
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
30.05.2015, 20:25
|
Аспирант
|
|
Регистрация: 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}
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
30.05.2015, 21:36
|
![Аватар для рони](https://javascript.ru/forum/image.php?u=7416&dateline=1372796129) |
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,135
|
|
Dark19,
потому что асинхронность когда у сервера есть возможность тогда и отвечает - 1 запрос скажем обрабатывался 100ms а второй 10ms -- в результате ответ на второй пришёл быстрее ответа на первый.
|
|
|
|