无法在javascript中将undefined转换为object

时间:2013-02-07 05:06:53

标签: javascript jquery

更新:我添加了小提琴。请参考here。使用Web控制台进行错误。

我正在编写旅行商问题的代码。这是代码:

var ind =[];      //values selected 
var cp =[];
var X;
var Y;
var tour = [];


// no values selected in the starting
for(j=0;j<friends_cnt;j++) {
  ind[j] = 0;
}


// distances at i,i infinity
for(i=0;i<friends_cnt;i++) {
  distance[i][i] = 9999999999999;
}

var k = 0;
var X = 0;

tour[k] =  X;
ind[X] = 1;


var i =1;
while(i<friends_cnt &&  ind[i] === 0) {
  var min = 9999999999999;

    // finding minimum of the undeleted values
    for(j=0;j<friends_cnt;j++) {
      if(ind[j] === 0) {
        if(distance[X][j] < min) {
          min = distance[X][j];
          Y = j;  // y is the min city
        }
      }
    }


    k = k+1;               // counter for the starting city
    tour[k] = Y;           //city added
    ind[Y] = 1;            

   X = Y;
   i++;
}

k = k+1;
tour[k] = tour[1];

for(var q=0;q<k+1;q++) {
  console.log(tour[q]);
}

});
});

现在每当我运行我的程序时,都显示错误

TypeError: can't convert undefined to object

var min = 9999999999999; 

我的问题是,这是因为JavaScript无法处理大量数字或其他内容吗?

3 个答案:

答案 0 :(得分:1)

Javascript的最大数量是1.7976931348623157e + 308(又名var Number.MAX_VALUE),所以这不应该是个问题。

如果您尝试访问对象的对象,它将无法工作。

你有distance[X][j]。这会尝试访问j的密钥distance[X]。要解决此问题,请将distance[X]定义为对象:

distance[X] = [];

其他例子:

var distance = [];

distance[i]
//undefined;

distance[i][i]
//syntax error

distance[i] = [];

distance[i][i]
//undefined;

对于2D数组,请参阅this问题。

答案 1 :(得分:0)

尝试以最小数量 var min = int.MinValue
最大数量 var max = int.MaxValue

<强>被修改
请参阅Reference

Number.Max_Value  
Number.Min_Value

<强>已更新
如果您看到自己的代码,则表示您填写了ind[]

中的0
for(j=0;j<friends_cnt;j++) {
  ind[j] = 0;
}

并且在您的情况下,您已从i设置1的值。所以对于最后一个元素,它可能会抛出错误

答案 2 :(得分:0)

问题实际上在这里:

distance[i][i] = 9999999999999;

如果distanceundefined或为空数组,则该语句将失败。这应该解决它:

var distance = []; // <-- this is missing from the top of your code

// ...

if (!distance[i]) {
    distance[i] = [];
}
distance[i][i] = 9999999999999;