2016-09-22 4 views
1

Я создаю приложение для опроса, которое должно регистрировать пользователей ip и какой выбор они проголосовали в дополнение к тому, что было, когда они голосовали.Использование array.push дает undefined

Для этого я представил себе создание объекта для каждого «голосования», который включал каждое из этих свойств в качестве свойства, а затем толкание этого объекта в массив вполне соответствовало моим потребностям.

Все работало нормально, пока я не попытался использовать push my object в моем массиве. То, что я в настоящее время говорит, что мой массив не определен.

Что именно происходит? Я попытался использовать индекс и установил параметр голосованияArray [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) 

Редактировать:

Из-за большого количества людей, предполагающих, что я объявил, но не создал экземпляр varriable 'voteArray' как массив, и что мои фрагменты не включили все, что я переписал, что мне нужно для удовлетворения этих комментариев и ответов.

Я по-прежнему получаю ту же ошибку и о voteArray.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 
    }); 
} 
+2

'' votingArray' является undefined'. То, что говорит ошибка. – vlaz

+0

Да, но почему это не определено? Я объявил это и определяю, не вставляю ли я массив и console.log, я получаю ту же ошибку. –

+2

попытайтесь инициализировать 'voteArray' с начальным значением, например' var voteArray = []; ' –

ответ

2

Ваша переменная votingArray не инициализирован. Если вы хотите, чтобы быть массивом, необходимо заменить строку

var votingArray; 

с

var votingArray = []; // Empty array instance 
+1

'Чтобы он вел себя как массив', он будет _will_ быть массивом. – vlaz

+1

Объявление этого параметра дает такой же код ошибки. Я обновил свой вопрос. –

+0

После этого вы перезапустили приложение? – zerkms

0

инициализировать массив или передать его в функцию вместо того, чтобы иметь плавающий вар в файле. Мы также не можем видеть, как в вашем вопросе вызывается 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); 

} 
+0

Я немного порезал свой код, но до этого даже после вашего метода дал мне ту же ошибку. –

+0

Где вы называете 'trackVote'? – httpNick

+0

С моим текущим кодом мне больше не нужно. Я просто делаю то, что функция trackVote сделала во время голосования. –

Смежные вопросы