2016-09-01 10 views
0
未定義

のプロパティ「長さ」を読み込めませんチックタックつま先のゲームをコーディングしようとしたときに、私はいくつかのJavaScriptコードを持っていますが、クロムの開発者ツールは、このエラーを与える逃したVARの前に:

Uncaught TypeError: Cannot read property 'length' of undefined 私は 'isEnd(bigArray [i] [j]);'とコメントすると、コードの終わりに、それは動作します。 コード:

var inputItem = 'o'; 
 
var board = [null, null, null, null, 'o', null, null, null, null]; 
 
var sign = { 
 
    max: inputItem === "o" ? "x" : "o", 
 
    min: inputItem === "x" ? "x" : "o" 
 
}; 
 

 
function generateTable(board, sign) { 
 
    var testBoard = [], 
 
    nextBoard; 
 
    for (var i = 0; i < board.length; i++) { 
 
    nextBoard = board.slice(); 
 
    if (!nextBoard[i]) { 
 
     nextBoard[i] = sign; 
 
     testBoard.push(nextBoard); 
 
    } 
 
    } 
 
    return testBoard; 
 
} 
 

 
function isEnd(board) { 
 
    console.log('board', board); 
 
    for (i = 0; i < board.length; i += 3) { 
 
    if (board[i] === board[i + 1] && board[i + 1] === board[i + 2]) { 
 
     return board[i] !== null ? board[i] : false; 
 
    } 
 
    } 
 
    for (var j = 0; j < board.length; j++) { 
 
    if (board[j] === board[j + 3] && board[j + 3] === board[j + 6]) { 
 
     return board[j] !== null ? board[j] : false; 
 
    } 
 
    } 
 

 
    if ((board[4] === board[0] && board[4] === board[8]) || 
 
    (board[4] === board[2] && board[4] === board[6])) { 
 
    return board[4] !== null ? board[4] : false; 
 
    } 
 
} 
 

 
function miniMax() { 
 
    var testBoard = generateTable(board, sign.max); 
 
    testBoard = testBoard.map(function(elem) { 
 
    return generateTable(elem, sign.min); 
 
    }); 
 
    return testBoard; 
 
} 
 
var bigArray = miniMax(); 
 
console.log(bigArray); 
 

 

 
var maxArray = 0; 
 
var tempArray = 0; 
 
var maxCoord = 0; 
 

 
for (var i = 0; i < bigArray.length; i++) { 
 
    for (var j = 0; j < bigArray[i].length; j++) { 
 
    console.log('i, j: ', i, " ", j); 
 
    isEnd(bigArray[i][j]); 
 
    maxCoord = i; 
 
    if (tempArray > maxArray) { 
 
     maxCoord = i; 
 
    } 
 
    } 
 
}
結果は isEnd()boardが定義されていないためです

i, j: 0 0 Script snippet #21:22 
board ["x", "o", null, null, "o", null, null, null, null] Script snippet #21:57 
i, j: 6 1 Script snippet #21:22 
board [null, "o", null, null, "o", null, null, "x", null] 

答えて

2

機能でからです:

function isEnd(board) { 

あなたはこのラインがあります。

for (i = 0; i < board.length; i += 3) { 

をだから私の変数がグローバルです。

変更するには、この行に:

for (var i = 0; i < board.length; i += 3) { 

例:

var inputItem = 'o'; 
 
var board = [null, null, null, null, 'o', null, null, null, null]; 
 
var sign = { 
 
    max: inputItem === "o" ? "x" : "o", 
 
    min: inputItem === "x" ? "x" : "o" 
 
}; 
 

 
function generateTable(board, sign) { 
 
    var testBoard = [], 
 
     nextBoard; 
 
    for (var i = 0; i < board.length; i++) { 
 
    nextBoard = board.slice(); 
 
    if (!nextBoard[i]) { 
 
     nextBoard[i] = sign; 
 
     testBoard.push(nextBoard); 
 
    } 
 
    } 
 
    return testBoard; 
 
} 
 

 
function isEnd(board) { 
 
    console.log('board', board); 
 
    
 
    // 
 
    // This is the only line changed 
 
    // 
 
    for (var i = 0; i < board.length; i += 3) { 
 
    if (board[i] === board[i + 1] && board[i + 1] === board[i + 2]) { 
 
     return board[i] !== null ? board[i] : false; 
 
    } 
 
    } 
 
    for (var j = 0; j < board.length; j++) { 
 
    if (board[j] === board[j + 3] && board[j + 3] === board[j + 6]) { 
 
     return board[j] !== null ? board[j] : false; 
 
    } 
 
    } 
 

 
    if ((board[4] === board[0] && board[4] === board[8]) || 
 
     (board[4] === board[2] && board[4] === board[6])) { 
 
    return board[4] !== null ? board[4] : false; 
 
    } 
 
} 
 

 
function miniMax() { 
 
    var testBoard = generateTable(board, sign.max); 
 
    testBoard = testBoard.map(function(elem) { 
 
    return generateTable(elem, sign.min); 
 
    }); 
 
    return testBoard; 
 
} 
 
var bigArray = miniMax(); 
 
console.log(bigArray); 
 

 

 
var maxArray = 0; 
 
var tempArray = 0; 
 
var maxCoord = 0; 
 

 
for (var i = 0; i < bigArray.length; i++) { 
 
    for (var j = 0; j < bigArray[i].length; j++) { 
 
    console.log('i, j: ', i, " ", j); 
 
    isEnd(bigArray[i][j]); 
 
    maxCoord = i; 
 
    if (tempArray > maxArray) { 
 
     maxCoord = i; 
 
    } 
 
    } 
 
}

+0

ああ、ありがとう。不気味なIDE - 変数が既に割り当てられているので、常に 'var'を削除するように勧めます。 :>> –

0

です。あなたが送っているものを確認してください。

おそらくbigArray[i][j]ではなくbigArrayを送信したいとします。

+0

しかし、それは常に未定義ではありません。 'I、J:0 0 ' ボード[ "x"、 "o"、null、null、 "o"、null、null、null、null] i、j:6 1 ボード[null、 "o"、null、null、 "o"、null、null、 "x"、null] 未キャッチタイプエラー:未定義のプロパティ 'length'を読み取ることができません –

+0

ああ、実際のエラーに当たったときの状況について、元の質問にその詳細を含めてください。 – dlsso

関連する問題