2016-01-20 66 views
0

我是JS的新手,請大發慈悲!我試圖實現一些代碼,但我遇到了一個問題。Pure JavaScript - Array value undefined

var edges = [{src: 3, dst: 61}, {src: 46, dst: 40}, {src: 63, dst: 65}, {src: 1, dst: 50}]; 
 
var G = []; 
 
var min = 0; 
 
var mini = 0; 
 
var v; 
 
var m = 99; 
 
var n = edges.length; 
 
for (i = 0; i < m; i++) { 
 
    G[i] = []; 
 
} 
 
n = edges.length; 
 
for (i = 0; i < m; i++) { 
 
    G[i].push({ 
 
    l: Infinity, 
 
    previous: undefined 
 
    }) 
 
    for (j = 0; j < n; j++) { 
 
    if (edges[j].src == i) { 
 
     G[i].push(edges[j].dst); 
 
     G[i].sort(); 
 
    } 
 
    } 
 
    G[i].unshift(i); 
 
} 
 
var Q = G; 
 
var u = []; 
 
u = Q[0]; 
 
var alt; 
 
Q[0].l = 0; 
 
while ((Q.length) != 0) { 
 
    for (k = 0; k < m ; k++) { 
 
    if (Q[k].l < min) { 
 
     mini = Q[k][0]; 
 
     u = Q[mini]; 
 
    } 
 
    } 
 
    Q.splice(mini, 1); 
 
    m--; 
 

 
    for (i = 1; i < (u.length) ; i++) { 
 
    alt = u.l + 1; 
 
    v = u[i]; 
 
    for(j = 0; j < m; j++) { 
 
     if(Q[j][0] == v) { 
 
     console.log(v); 
 
     console.log(Q[j].l); 
 
     v = j; 
 
     console.log(v); 
 
     } 
 
    } 
 

 

 
    if ( alt < Q[v].l){ 
 
     Q[v].l = alt; 
 
     Q[v].previous = u; 
 
    } 
 
    } 
 
    mini = 0; 
 
}

在這裏,我得到52行錯誤,並指出「不能讀取屬性的線55未定義的‘L’」。值'l'默認情況下應該是99999999999999999999,然而,這消失了。我已經參加了一個小時,能否請你幫忙?爲什麼我會得到未定義的錯誤?

+1

請在問題中包含正確的代碼,爲什麼我們必須點擊鏈接? – nicael

+0

'99999999999999999999'很可能過大,並且被瀏覽器處理爲'NaN'。 – AMACB

+2

你應該使用更多的描述性變量名稱。該代碼的流程非常難以遵循。 – Jivings

回答

0

我發現,如果我使用

G[i].push({ 
    l: Infinity, 
    previous: undefined 
    }) 

它是不可能通過G[i].l訪問「l」或「之前的」,因此,它是不確定的。相反,我可以通過G[i][j]["l"]訪問它,因爲

{ 
    l: Infinity, 
    previous: undefined 
} 

是對自己的元素,我要訪問它的元素。