1

26 行目で「 Uncaught TypeError: Cannot read property 'length' of undefined 」が表示されます。コンソールは 24 行目をインデックス 1 の値を持つ配列としてログに記録するため、これが発生する理由はわかりませんが、25 行目は未定義としてログに記録します。

"use strict"
function findpath(G,si,di){
    //G is an array of nodes (with id, lat, lon)
    var P=[si];
    var C=[0,P];
    var M=[C];
    var O=[];
    var ctr=0;
    var done = false;
    var reached = false;
    var best = undefined;


    while(!done){
        ctr++;
        if( ctr > 100 ){
            alert("Sorry, can't find the destination.");
            return P;
        }

        for (var i=0;i<M.length;++i){
            console.log(P);
            console.log(C);
            console.log(M[i]);
            console.log(M[i[0]]);
            var last = M[i[1]].length;
            var v = M[i[1[last]]];

            //select a random neighbor...
            if( v.N.length === 0 ){
                alert("Wat?");
                return [];
            }
            else if( v.N.length === 1 ){
                break;
            }
            else if( v === di ){
                break;
            }
            else {
                for (var j=0;j<v.N.length;++j){
                    var temp = M[i];
                    O.push(temp[1].push(v.N[j]));
                    var dist = distance(v.lat,v.lon,v.N[j].lat,v.N[j].lon);
                    var temp2 = O.length-1;
                    O[temp2[0]]+=dist;
                    if (v.N[j]===di){
                        reached = true;
                        if (best === undefined){
                            console.log("ASSIGN");
                            best = O[temp2];
                        }
                        else {
                            if (O[temp2[0]]<best[0]) {
                                best = O[temp2];
                            }
                        }
                    }
                }
            }
        }
        M = O;
        var any = false;
        for (var i=0;i<M.length;++i) {
            if (M[i[0]]<best[0]) {
                any = true;
            }
        }
        if (!any) {
            done = true;
        }
    }

    //return the path
    return best[1];
}

function distance(x1,y1,x2,y2){
    return Math.sqrt(Math.pow((x2-x1),2)+Math.pow((y2-y1),2));
}

出力:

Array[1]     findpath.js:22
Array[2]     findpath.js:23
Array[2]
   0: 0
   1: Array[1]
      0: 13
   length: 1
   __proto__: Array[0]
   length: 2
   __proto__: Array[0]     findpath.js:24
undefined findpath.js:25
Uncaught TypeError: Cannot read property 'length' of undefined    findpath.js:26
4

1 に答える 1

3

編集- あなたのコメントによると、配列の配列があるように見えます。私があなたを正しく理解していればM[i[1]]M[i][1]


チェックしています

console.log(M[i[0]]);

しかし、その後アクセスする

 var last = M[i[1]].length;

M[i[0]]有効な配列が含まれているように見えますが、含まれていM[i[1]]ません。

M、および配列を詳しく見て、未定義のi理由を突き止めることをお勧めします。M[i[1]]


以下のコメントにあるように、編集iはループ制御変数のようです。単純に入力するつもりでしたM[i]か?

于 2012-12-08T05:54:40.523 に答える