2016-10-02 49 views
0

这是一个奇怪的错误,因为它似乎是错误的,错误的是:无法设置“标记”的PROPERT未定义

TypeError: Cannot set property 'mark' of undefined 
at /home/ubuntu/workspace/tests/app.js:194:36 
at Layer.handle [as handle_request](/home/ubuntu/workspace/tests/node_modules/express/lib/router/layer.js:95:5) 
at next (/home/ubuntu/workspace/tests/node_modules/express/lib/router/route.js:131:13) 
at Route.dispatch (/home/ubuntu/workspace/tests/node_modules/express/lib/router/route.js:112:3) 
at Layer.handle [as handle_request] (/home/ubuntu/workspace/tests/node_modules/express/lib/router/layer.js:95:5) 
at /home/ubuntu/workspace/tests/node_modules/express/lib/router/index.js:277:22 
at Function.process_params (/home/ubuntu/workspace/tests/node_modules/express/lib/router/index.js:330:12) 
at next (/home/ubuntu/workspace/tests/node_modules/express/lib/router/index.js:271:10) 
at SessionStrategy.module.exports.strategy.pass (/home/ubuntu/workspace/tests/node_modules/passport/lib/middleware/authenticate.js:325:9) 
at SessionStrategy.authenticate (/home/ubuntu/workspace/tests/node_modules/passport/lib/strategies/session.js:71:10) 
at attempt (/home/ubuntu/workspace/tests/node_modules/passport/lib/middleware/authenticate.js:348:16) 
at authenticate (/home/ubuntu/workspace/tests/node_modules/passport/lib/middleware/authenticate.js:349:7) 
at Layer.handle [as handle_request] (/home/ubuntu/workspace/tests/node_modules/express/lib/router/layer.js:95:5) 
at trim_prefix (/home/ubuntu/workspace/tests/node_modules/express/lib/router/index.js:312:13) 
at /home/ubuntu/workspace/tests/node_modules/express/lib/router/index.js:280:7 
at Function.process_params (/home/ubuntu/workspace/tests/node_modules/express/lib/router/index.js:330:12) 

创建此错误代码是:

for(var i = 0;i < req.body.numOfMethods;i++) 
{ 
    for(var x = 0;x< numOfParts[i];x++) 
    { 
     methodsArray[i][x].mark=parts[i][x].mark; 
     methodsArray[i][x].content=parts[i][x].content; 
    } 
} 

然而,当我这个文本

console.log("numOfParts[i] = "+numOfParts[0]); 
console.log("numOfParts[i] = "+numOfParts[1]); 
console.log("numOfMethods = "+req.body.numOfMethods); 
for(var i = 0;i < req.body.numOfMethods;i++) 
{ 
    for(var x = 0;x< numOfParts[i];x++) 
    { 
     console.log("i = "+i); 
     console.log("x = "+x); 
     console.log("parts[i][x].mark = "+parts[i][x].mark); 
     console.log("parts[i][x].content = "+parts[i][x].content); 
    } 
} 

下运行的代码,它打印出:

numOfParts[i] = 3 
numOfParts[i] = 2 
numOfMethods = 2 
i = 0 
x = 0 
parts[i][x].mark = 2 
parts[i][x].content = test 
i = 0 
x = 1 
parts[i][x].mark = 2 
parts[i][x].content = test 
i = 0 
x = 2 
parts[i][x].mark = 2 
parts[i][x].content = test 
i = 1 
x = 0 
parts[i][x].mark = 3 
parts[i][x].content = test 
i = 1 
x = 1 
parts[i][x].mark = 3 
parts[i][x].content = test 

这非常显示methodsArray[i][x].mark未被设置为未定义的值。所以最终在这里我很失落,我应该怎么做才能解决这个错误。

这里是我的问题定义数组(如果我的错误在于这个代码中)

var methodsArray=[[{mark:Number,content:String}]]; 
    var numOfParts=[req.body.m1parts,req.body.m2parts,req.body.m3parts,req.body.m4parts]; 
    var parts=[ 
     [ 
      {mark:req.body.m1p1mark,content:req.body.m1p1content},{mark:req.body.m1p2mark,content:req.body.m1p2content}, 
      {mark:req.body.m1p3mark,content:req.body.m1p3content},{mark:req.body.m1p4mark,content:req.body.m1p4content}, 
      {mark:req.body.m1p5mark,content:req.body.m1p5content},{mark:req.body.m1p6mark,content:req.body.m1p6content}, 
      {mark:req.body.m1p7mark,content:req.body.m1p7content},{mark:req.body.m1p8mark,content:req.body.m1p8content}, 
      {mark:req.body.m1p9mark,content:req.body.m1p9content},{mark:req.body.m1p10mark,content:req.body.m1p10content} 
     ], 
     [ 
      {mark:req.body.m2p1mark,content:req.body.m2p1content},{mark:req.body.m2p2mark,content:req.body.m2p2content}, 
      {mark:req.body.m2p3mark,content:req.body.m2p3content},{mark:req.body.m2p4mark,content:req.body.m2p4content}, 
      {mark:req.body.m2p5mark,content:req.body.m2p5content},{mark:req.body.m2p6mark,content:req.body.m2p6content}, 
      {mark:req.body.m2p7mark,content:req.body.m2p7content},{mark:req.body.m2p8mark,content:req.body.m2p8content}, 
      {mark:req.body.m2p9mark,content:req.body.m2p9content},{mark:req.body.m2p10mark,content:req.body.m2p10content} 
     ], 
     [ 
      {mark:req.body.m3p1mark,content:req.body.m3p1content},{mark:req.body.m3p2mark,content:req.body.m3p2content}, 
      {mark:req.body.m3p3mark,content:req.body.m3p3content},{mark:req.body.m3p4mark,content:req.body.m3p4content}, 
      {mark:req.body.m3p5mark,content:req.body.m3p5content},{mark:req.body.m3p6mark,content:req.body.m3p6content}, 
      {mark:req.body.m3p7mark,content:req.body.m3p7content},{mark:req.body.m3p8mark,content:req.body.m3p8content}, 
      {mark:req.body.m3p9mark,content:req.body.m3p9content},{mark:req.body.m3p10mark,content:req.body.m3p10content} 
     ], 
     [ 
      {mark:req.body.m4p1mark,content:req.body.m4p1content},{mark:req.body.m4p2mark,content:req.body.m4p2content}, 
      {mark:req.body.m4p3mark,content:req.body.m4p3content},{mark:req.body.m4p4mark,content:req.body.m4p4content}, 
      {mark:req.body.m4p5mark,content:req.body.m4p5content},{mark:req.body.m4p6mark,content:req.body.m4p6content}, 
      {mark:req.body.m4p7mark,content:req.body.m4p7content},{mark:req.body.m4p8mark,content:req.body.m4p8content}, 
      {mark:req.body.m4p9mark,content:req.body.m4p9content},{mark:req.body.m4p10mark,content:req.body.m4p10content} 
     ] 
    ]; 

回答

0

var methodsArray=[[{mark:Number,content:String}]];这并不一定只是methodsArray[0][0]什么。

methodsArray[i][x](或甚至methodsArray[i])是undefined(除了当i===0x===0 [再次除了阵列的方法,例如i===0x==="push"但这是关闭点])。

由于在测试输出显示,你的循环比访问其他methodsArray[0][0]东西,并试图设置属性。

如果你愿意,你可以创建在旅途中的元素:

var methodsArray = []; 
for(var i = 0; i < req.body.numOfMethods; i++) 
{ 
    methodsArray.push([]); 
    for(var x = 0; x< numOfParts[i]; x++) 
    { 
     methodsArray.push({ 
      mark: parts[i][x].mark, 
      content: parts[i][x].content 
     }); 
    } 
} 

这是只被一度创造methodsArray时完成。

作为另一个说明,我意识到你可能会写作打字稿(或者流量?)。类型注释不使用=,而使用:,因此它需要是var methodsArray:{mark:Number,content:String}[][];var methodsArray:Array<Array<{ mark:number, content:string }>>;。在Javascript中,var methodsArray=[[{ mark:number, content:string }]];是具有一个元件,以再次一种元素的数组,它是一个对象,其属性markNumber构造和contentString构造的数组。

+0

因此,要解决这个问题,我需要做的 methodsArray [I] [X] .mark.push(件[I] [X] .mark); methodsArray [i] [x] .content.push(parts [i] [x] .content); 是吗? –

+0

不,你的问题是'methodsArray [i]'或'methodsArray [i] [x]'是未定义的,你不能在undefined上设置属性。 undefined上也没有'push'。例如。 'methodsArray [1] === undefined'或'methodsArray [0] [1] === undefined'。你在做'方法数组[1] [0] .mark'转换为'undefined [0] .mark',它不起作用。 – ASDFGerte

+0

好吧,那么我将如何定义它,或者我会以另一种方式做到这一点? –

相关问题