Javascript(node.js):迭代嵌套对象并获取未定义

时间:2015-05-31 09:26:46

标签: javascript node.js loops object nested

我在命令行上使用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);

0 个答案:

没有答案