2012-12-08 6 views
1

26 번 줄에 "Uncaught TypeError : 속성 '길이'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 
+0

M [i [0]]과 [M [i [1]]]'으로 무엇을하려고합니까? – Musa

답변

3

편집 - 귀하의 의견에 따라, 당신은 배열의 배열 등을 가지고있는 것처럼 내가 제대로 이해하는 경우 즉, M[i[1]]이 있어야한다 보인다 M[i][1]


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

하지만 M[i[0]]가 유효한 배열을 포함 것처럼 보인다

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

에 접근하지만, M[i[1]]하지 않습니다.

왜 및 i 배열을 자세히 살펴보고 M[i[1]]이 정의되지 않았는지 확인하는 것이 좋습니다.


편집 아래의 설명에 따르면 i이 루프 제어 변수 인 것으로 보입니다. 간단히 을 입력하셨습니까?

+0

'i'는 배열이 아닌 루프 카운터입니다. – Musa

+0

문제는'console.log (M [i]);'는 0 인덱스에서 내용을'0'으로, 1 인덱스에서 배열을 반환합니다. 'M [i [0]]와 M [i [0]]는 정의되지 않은 것으로 돌아온다. – iwhitt567

+0

@ iwhitt567 -'i'가 정수인 경우,'M [i [0]]'은 단순히 무효입니다. 너 뭐하려고? –

관련 문제