使用数组.Push输出未定义

Using array.push yields undefined

本文关键字:输出 未定义 Push 数组      更新时间:2023-09-26

我正在创建一个投票应用程序,应该记录用户的ip,以及他们投票的选择,以及他们投票的时间。

为此,我想象为每个'vote'创建一个对象,其中每个'vote'都包含一个属性,然后将该对象放入一个数组中,这将非常适合我的需要。

一切都运行良好,直到我试图使用push我的对象到我的数组。我现在说的是我的数组是undefined

到底发生了什么?我尝试使用索引并将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'作为一个数组,并且我的代码片段没有包含所有内容,我已经重写了我必须满足这些注释和答案的内容。

我仍然得到相同的错误关于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。如果您希望它是一个数组,您必须替换

var votingArray;

var votingArray = []; // Empty array instance

初始化数组或将其传递给函数,而不是在文件中使用浮动var。在你的问题中,我们也看不到where trackVote被调用的用法,但这是我的建议。

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);
}