使用array.push产生未定义的

我创build了一个轮询应用程序,logging用户的IP地址,以及他们投票的时间以及投票的时间。

为了做到这一点,我设想为每个“投票”创build一个对象,将每个对象包含在一个属性中,然后将该对象推入一个数组中,以适合我的需求。

一切都运行良好,直到我试图使用推我的对象到我的数组。 我目前说,我的数组是未定义的。

究竟发生了什么? 我尝试使用索引和设置votingArray [我]的对象,但也给了一个未定义的错误。

这是我的代码:

//Vote for the pet passed into by user function vote(pet, time){ linkService.incrementCount(pet); trackVote(pet, time); res.render('vote', { pet: pet }); } var votingArray = []; function trackVote(pet, time) { var voteObject = { time: time, pet: pet, ip: req.ip }; console.log(voteObject); votingArray.push(voteObject); console.log(votingArray); } function showResults(){ res.render('results', { votingArray: votingArray }); } 

这里是我的控制台中的错误:

(第69行是'votingArray.push(voteObject);')

 Express started on http://localhost:8080; press Ctrl-C to terminate. { time: 1474584882143, pet: 'scout', ip: '::ffff:10.240.1.15' } TypeError: Cannot read property 'push' of undefined at trackVote (/home/ubuntu/workspace/Projects/projectTwo/app.js:69:14) at vote (/home/ubuntu/workspace/Projects/projectTwo/app.js:51:6) at /home/ubuntu/workspace/Projects/projectTwo/app.js:43:6 at Layer.handle [as handle_request] (/home/ubuntu/workspace/Projects/projectTwo/node_modules/express/lib/router/layer.js:95:5) at next (/home/ubuntu/workspace/Projects/projectTwo/node_modules/express/lib/router/route.js:131:13) at Route.dispatch (/home/ubuntu/workspace/Projects/projectTwo/node_modules/express/lib/router/route.js:112:3) at Layer.handle [as handle_request] (/home/ubuntu/workspace/Projects/projectTwo/node_modules/express/lib/router/layer.js:95:5) at /home/ubuntu/workspace/Projects/projectTwo/node_modules/express/lib/router/index.js:277:22 at param (/home/ubuntu/workspace/Projects/projectTwo/node_modules/express/lib/router/index.js:349:14) at param (/home/ubuntu/workspace/Projects/projectTwo/node_modules/express/lib/router/index.js:365:14) 

编辑:

由于很多人build议我已经声明,但没有将可变的“votingArray”实例化为一个数组,并且我的代码片段中没有包含所有我已经改写的内容,我必须满足这些意见和答案。

我仍然得到有关votingArray.push相同的错误。

这是我的新代码:

 var votingArray = []; //Vote for the pet passed into by user function vote(pet, time){ linkService.incrementCount(pet); var votingObject = { ip: req.ip, pet: pet, timecode: time }; votingArray.push(votingObject); res.render('vote', { pet: pet }); } function showResults(){ res.render('results', { votingArray: votingArray }); } 

您的variablesvotingArray未初始化。 如果你想要它是一个数组,你必须replace该行

 var votingArray; 

 var votingArray = []; // Empty array instance 

初始化你的数组或者把它传递给函数而不是在你的文件中有一个浮动的var。 我们也看不到trackVote在你的问题中被调用的地方的用法,但这是我的build议。

 var votingArray = []; function trackVote(pet, time) { var voteObject = { time: time, pet: pet, ip: req.ip }; console.log(voteObject); votingArray.push(voteObject); console.log(votingArray); } 

 function trackVote(pet, time) { var votingArray = []; var voteObject = { time: time, pet: pet, ip: req.ip }; console.log(voteObject); votingArray.push(voteObject); console.log(votingArray); } 

要么

 function trackVote(pet, time, votingArray) { var voteObject = { time: time, pet: pet, ip: req.ip }; console.log(voteObject); votingArray.push(voteObject); console.log(votingArray); }