【问题标题】:Using array.push yields undefined使用 array.push 产生 undefined
【发布时间】: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
    });
}

【问题讨论】:

  • votingArrayundefined。正是错误所说的。
  • 是的,但为什么未定义?我已经声明了它,并定义了如果我不推入数组并 console.log 它,我会收到同样的错误。
  • 尝试用初始值初始化votingArray,比如var votingArray = [];
  • 你已经声明了它。就是这样。当您在 undefined 事物上调用 .push 时,它不会神奇地变成一个数组。
  • @AugieLuebbers。请不要像您那样编辑您的问题,因为它会破坏您的原始问题和我的答案之间的关系。相反,将您的编辑作为一个新段落。如果您仍然有同样的错误,您需要向我们提供更多信息,因为这不足以了解您的整个代码是如何工作的。

标签: javascript arrays json node.js


【解决方案1】:

您的变量votingArray 未初始化。如果你希望它是一个数组,你必须替换该行

var votingArray;

var votingArray = []; // Empty array instance

【讨论】:

  • To make it behave like an array 好吧,它是一个数组。
  • 这样声明会产生相同的错误代码。我已经更新了我的问题。
  • 那之后你有没有重启过应用?
  • 我已重新启动应用程序并再次修改了我的问题。
【解决方案2】:

初始化您的数组或将其传递给函数,而不是在文件中使用浮动变量。我们也看不到在您的问题中调用 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);

}

【讨论】:

  • 我已经把我的代码删减了不少,但在此之前,即使按照你的方法也给了我同样的错误。
  • 你在哪里打电话trackVote
  • 使用我当前的代码,我不再需要了。我只是做函数 trackVote 在函数 vote 中所做的事情。
猜你喜欢
  • 1970-01-01
  • 2021-04-04
  • 2023-02-25
  • 2018-07-08
  • 2019-06-18
  • 2022-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多