2015-11-13 75 views
1

请注意,我今天上午只学习了如何使用对象,所以这主要是一个练习来解决这个问题。尝试使用提示中的输入作为函数内的对象值

我能够设置一个列表的学生数组。每个学生都是具有多个属性的对象。我还能够使用for循环向数组中的每个对象添加另一个属性和值。

我现在要做的是提示用户输入一个对象名称“student1,student2等”。我试图在函数reportStudentInfo(info)中使用该提示的值,保存为var studentSelected。

什么工作:如果我摆脱变量“selectedStudent”,并且我特别决定放入一个对象值student1,student2等,它按预期工作。

我不明白: 我猜来自提示的提示值改变为字符串,它似乎搞乱了对象的值,即使提示输入可能是: “student1”这个函数并不是以student1的形式读取它的。它为每个对象属性值返回一个未定义的值。

我真的很希望我提出一个足够清晰的问题。谢谢你的帮助。

  • 洛根

连结的jsfiddle:https://jsfiddle.net/lwood3499/aevsbrk8/

var selectedStudent = prompt("Which student do you want to see the results for Test #1?"); 

reportStudentInfo(selectedStudent.name + “:” + selectedStudent.test1);

+0

您需要使用selectedStudent来从列表中选择所需的条目。我更新了你的JSFiddle所以它的工作原理:https://jsfiddle.net/aevsbrk8/1/ –

+0

对不起,但它似乎没有提供任何输出。它仍然像以前一样提示。但即使是“undefined:undefined”也没有像之前那样出现。 –

回答

1

var selectedStudent = prompt("Which student do you want to see the results for Test #1?"); 

selectedStudent后,在提示符下输入的字符串。它没有nametest1属性。

如果selectedStudent对象已经存在,你可以做

var selectedStudent.name = prompt("Which student do you want to see the results for Test #1?"); 

var studentName = prompt("Which student do you want to see the results for Test #1?"); 

更新:

var selectedStudent = prompt("Which student do you want to see the results for Test #1?"); 
var found = null; 
for (var iter = 0; iter < list.length; iter++) { 
    if (selectedStudent == list[iter].name) { 
    found = list[iter]; 
    break; 
    } 
} 
if (found) { 
    reportStudentInfo(found.name + " : " + found.test1); 
} else { 
    alert(selectedStudent + " not found"); 
} 
+0

谢谢您确认提示符返回与对象名称不同的字符串。我假设,但不确定。我有一个JSFiddle的链接,希望能帮助我澄清我正在尝试的东西。我在函数中尝试了selectedStudent.name方法。它似乎不具有相同的价值。当我手动输入用户可能在提示中输入的相同字符时,它将起作用。我想问题是:有没有办法将提示字符串转换回对象值?谢谢你的帮助。 –

+0

@LoganWood - 查看更新。 – Igor

+0

伊戈尔 - 它似乎只返回找不到的学生。 –

相关问题