編輯:爲了簡單起見,考慮下面的代碼:值串聯內如果條件
var z = {x: 1, y: 1};
console.log(z.x+5 + ' ' + z.y+5);
爲什麼輸出是(6,15),而不是(6,6)?
編輯前:我有以下功能:
function findPath(startX, startY, goalX, goalY){
var queue = [],
candidates = [],
path = [];
queue.push({x: startX, y: startY, searchDistance: 0, hasBeenSearched: true});
fillQueue();
function fillQueue(){
setInnerHTML(queue[0].x, queue[0].y, '.');
for(var i=-1; i<=1; i++){
if(queue[0].x + i < 0 || queue[0].x + i > boardHeight - 1){
continue;
}
for(var j=-1; j<=1; j++){
if(queue[0].y + j < 0 || queue[0].y + j > boardWidth - 1){
continue;
}
if(i == 0 && j == 0){
continue;
}
if(cells[queue[0].x + i][queue[0].y + j].type.blockMovement == true || findCell(queue[0].x + i, queue[0].y + j).hasBeenSearched == true){
console.log(queue[0].x + i + ' ' + queue[0].y + j)
continue;
}
if((queue[0].x + i == goalX) && (queue[0].y + j == goalY)){
setInnerHTML(queue[0].x + i, queue[0].y + j, '.');
candidates.push(queue[0]);
candidates.push({x: queue[0].x + i, y: queue[0].y + j, searchDistance: queue[0].searchDistance + 1, hasBeenSearched: true});
//fillPath();
return path;
}
queue.push({x: queue[0].x + i, y: queue[0].y + j, searchDistance: queue[0].searchDistance + 1, hasBeenSearched: true});
}
}
candidates.push(queue.shift());
if(queue.length > 0){
setTimeout(fillQueue, 0);
}else{
return 'no path found';
}
function findCell(x,y){
for(var i=0; i<queue.length; i++){
if(queue[i].x == x && queue[i].y == y){
return queue[i];
}else if(i == queue.length - 1 && (queue[i].x != x || queue[i].y != y)){
return {hasBeenSearched: false};
}
}
}
}
}
這是尋路算法我最近重寫和我有以下問題的一部分。在內部for循環中,當檢查此條件findCell(queue[0].x + i, queue[0].y + j).hasBeenSearched == true
時,第二個參數queue[0].y
和j
的值將被連接而不是僅僅被添加,而第一個參數的相同條件正常工作(添加的值)。我試圖找出現在幾個小時,我不知道發生了什麼。這兩個值queue[0].y
和j
都是數字(我通過控制檯日誌記錄typeof
對其進行了檢查),並且應該像第一個參數中的類似值一樣添加。任何幫助指出我做錯了什麼將不勝感激。先謝謝你。
Codepen鏈接:http://codepen.io/Furmanus/pen/LkXVwO/?editors=0011
這並不完全是我期待的答案,但它是好的和正確的答案 - 我只是問了錯誤的問題。代碼確實被打破了,它在一個我沒有預料到的地方被打破了 - 無論如何,我仍然學到了新的東西!所以謝謝你的回答:) – Furman