纯JavaScript - 数组值未定义

时间:2016-01-20 17:30:22

标签: javascript

我是JS的新手,请怜悯!我正在尝试实现一些代码,但我遇到了一个问题。

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 个答案:

答案 0 :(得分:0)

我发现如果我正在使用

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

G[i].l无法访问“l”或“previous”,因此未定义。相反,我可以G[i][j]["l"]访问它,因为

{ 
  l: Infinity, 
  previous: undefined 
}

本身就是一个元素,我必须访问它的元素。