【发布时间】:2016-09-22 23:01:01
【问题描述】:
我正在创建一个投票应用程序,该应用程序应该记录用户 ip、他们投票的选项以及他们投票的时间。
为此,我设想为每个“投票”创建一个对象,将其中的每一个都包含为一个属性,然后将该对象推入一个数组中,这将非常适合我的需求。
在我尝试将对象推送到数组之前,一切都运行良好。我目前所说的是我的数组是未定义的。
到底发生了什么?我尝试使用索引并将votingArray[i] 设置为对象,但这也给出了未定义的错误。
这是我的代码:
//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)
编辑:
由于很多人暗示我已经声明但没有将变量 'votingArray' 实例化为数组,并且我的 sn-ps 没有包含我重写的所有内容,我重写了我必须满足这些 cmets 的内容和答案。
我仍然收到关于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
});
}
【问题讨论】:
-
votingArray是undefined。正是错误所说的。 -
是的,但为什么未定义?我已经声明了它,并定义了如果我不推入数组并 console.log 它,我会收到同样的错误。
-
尝试用初始值初始化
votingArray,比如var votingArray = []; -
你已经声明了它。就是这样。当您在
undefined事物上调用.push时,它不会神奇地变成一个数组。 -
@AugieLuebbers。请不要像您那样编辑您的问题,因为它会破坏您的原始问题和我的答案之间的关系。相反,将您的编辑作为一个新段落。如果您仍然有同样的错误,您需要向我们提供更多信息,因为这不足以了解您的整个代码是如何工作的。
标签: javascript arrays json node.js