我在命令行上使用node运行此代码。我现在的问题是 console.log(checkparam [key] .stat); 行返回undefined而不是值。
在下面的代码中,我试图显示嵌套在另一个对象中的对象中的一组属性的所有值。问题是我得到了未定义,因为" stat" var被javascript识别为较低嵌套对象中的文字stat属性,而不是它应该在for(checkparam [key])循环中的var stat中的stat值。
var viewSheet = function(name, checkparam) {
for(var key in checkparam) {
if(checkparam[key].playerFirstName.toLowerCase() === name.toLowerCase()) {
for(var stat in checkparam[key])
{
console.log(checkparam[key].stat);
}
//return checkparam[key];
}
}
}; 我知道上面提到的for循环中的stat正确指向下层嵌套对象中的属性KEY,因为我可以只调试console.log,它们会显示键值。我只是不明白正确的过程是让Javascript识别我想记录那个特定值。
此外,我知道堆栈上的问题应该基于单个特定问题,但如果有人愿意回答第二个问题,我是否在这里错误地使用了对象? javascript对象的方式在我看来就像python词典或perl哈希,因此我一直认为以与在那些语言中相同的方式嵌套数据是可以的。
以下是上下文代码的整个部分。
//--MODULES
//Readline Sync for CLI prompting
var rlprompt = require('readline-sync');
//--DECLARE OBJECTS //
var fverparty = new Object();
//--DEFINE FUNCS //
//LIST FUNCTION
var list = function (param) {
console.log("Party members: ")
for (var key in param) {
console.log(param[key].playerFirstName);
}
}
//ADD FUNCTION
var add = function (playerFirstName, list, playerLastName, playerRace, playerClass) {
list[playerFirstName] = {
playerFirstName: playerFirstName,
playerLastName: playerLastName,
playerRace: playerRace,
playerClass: [playerClass]
};
}
//VIEW FUNCTION
var viewSheet = function(name, checkparam) {
for(var key in checkparam) {
if(checkparam[key].playerFirstName.toLowerCase() === name.toLowerCase()) {
for(var stat in checkparam[key])
{
console.log(checkparam[key].stat);
}
//return checkparam[key];
}
}
};
//--MAIN //
//-init
var adding = true;
//-run
//Add characters to party.
console.log("Let's add some people to a list.")
while (adding){
add(rlprompt.question("Please enter a first name: "), fverparty, rlprompt.question("Please enter a last name: "), rlprompt.question("Please enter a race: "), rlprompt.question("Please enter a class: "));
if (rlprompt.question("Any key to continue, (q/Q) to quit.").toLowerCase() == "q") {
adding = false;
}
}
//List the party members
list(fverparty);
//View character sheets
viewSheet(rlprompt.question("Enter a name to view their character sheet: "), fverparty);