Javascript 如果我没有';如果不嵌套if/else语句,则代码不会';不行。我为什么要筑巢? 概述
我正在学习JavaScript,有一个结合访问对象属性、循环和if/else语句的练习 我的代码不起作用。解决方案(有效)嵌套了if/else语句,但在其他方面似乎是相同的代码。我不明白有什么区别 练习指导Javascript 如果我没有';如果不嵌套if/else语句,则代码不会';不行。我为什么要筑巢? 概述,javascript,if-statement,nested,Javascript,If Statement,Nested,我正在学习JavaScript,有一个结合访问对象属性、循环和if/else语句的练习 我的代码不起作用。解决方案(有效)嵌套了if/else语句,但在其他方面似乎是相同的代码。我不明白有什么区别 练习指导 该函数应检查姓名是否为实际联系人的名字,以及给定属性(prop)是否为该联系人的属性 如果两者都为true,则返回该属性的“值” 如果姓名与任何联系人不对应,则返回“无此类联系人” 如果prop与找到的与姓名匹配的联系人的任何有效属性不对应,则返回“无此类属性” 给定数组 我的代码 (这
- 该函数应检查姓名是否为实际联系人的名字,以及给定属性(prop)是否为该联系人的属性
- 如果两者都为true,则返回该属性的“值”
- 如果姓名与任何联系人不对应,则返回“无此类联系人”
- 如果prop与找到的与姓名匹配的联系人的任何有效属性不对应,则返回“无此类属性”
函数lookUpProfile(名称、属性){
对于(变量i=0;i
运动方案
(哪个有效)
for(变量x=0;x
为什么?
我原以为这两个解决方案都能工作,但我的解决方案不行。为什么?在解决方案中,您会查找具有匹配名称的联系人。一旦找到具有提供名称的联系人,您将返回,这意味着循环结束(可能提前)。返回的内容取决于道具是否存在,但您确实返回了 在尝试中,每次循环的第一次迭代都会返回。如果希望保持相同的行为,代码应该是这样的:
function lookUpProfile(name, prop){
for (var i = 0; i < contacts.length; i++) {
if (contacts[i].firstName === name && contacts[i].hasOwnProperty(prop)) {
return contacts[i][prop];
} else if (contacts[i].firstName === name && !contacts[i].hasOwnProperty(prop)) {
return "No such property";
}
}
return "No such contact";
}
函数lookUpProfile(名称、属性){
对于(变量i=0;i
您可以看到联系人[i]是如何.firstName在这种情况下会被检查两次。这是因为如果尚未找到与给定名称的联系人,则不希望返回退出循环。嵌套通过减少对复杂条件表达式的重复检查来清除此问题。我后来意识到,部分问题是我对条件的最后一部分感到懒惰声明:
else{
返回“无此类财产”;
}
如果我写出来的话
if(contacts[x].firstName==name&&!(contacts[x].hasOwnProperty(prop))
为满足这一要求:
- 如果prop与找到的与姓名匹配的联系人的任何有效属性不对应,则返回“无此类属性”
另一个问题是,最后一个“lazy”else语句提供了一个默认值,并且总是以联系人[0]结束函数。这意味着只有联系人[0]会通过函数;没有联系人[1]的进一步迭代。联系人[2]等等。(学习经验很好!)您的代码不起作用,因为一旦名称与给定名称不相等,您将立即返回 让我们运行你的程序 i=0,我们比较联系人[0]。name=Akira和Sherlock。姓名是否等于Sherlock?否。因此,您的第一个if
if(联系人[i]。firstName==name&&contacts[i]。hasOwnProperty(prop)){
条件失败。我们进入下一个条件,如果:
else if (contacts[i].firstName !== name) {
return "No such contact";
这个条件是真的,所以我们马上回来
你看到你的代码如何过早地返回了吗?它不允许我们真正前进
您需要做的是将返回放在for循环之外。我不会给出确切的解决方案,因为这显然是一个家庭作业解决方案。但提示应该会推动您前进。这两个代码块做的事情不同,例如,看看您在哪里检查HasownProperty。实际上,此代码并没有满足所有的要求irements。我试过使用它,反馈是
lookUpProfile(“Bob”,“number”);
应该返回“No-this contact”,但是没有。你是对的,我忘记了“else-if”中条件的第二部分。为了将来的答案寻求者而更新。
for (var x = 0; x < contacts.length; x++){
if (contacts[x].firstName === name) {
if (contacts[x].hasOwnProperty(prop)) {
return contacts[x][prop];
} else {
return "No such property";
}
}
}
return "No such contact";
lookUpProfile("Sherlock", "likes");
//returns ["Intriguing Cases", "Violin"]
function lookUpProfile(name, prop){
for (var i = 0; i < contacts.length; i++) {
if (contacts[i].firstName === name && contacts[i].hasOwnProperty(prop)) {
return contacts[i][prop];
} else if (contacts[i].firstName === name && !contacts[i].hasOwnProperty(prop)) {
return "No such property";
}
}
return "No such contact";
}
else if (contacts[i].firstName !== name) {
return "No such contact";