【发布时间】:2020-05-17 13:51:57
【问题描述】:
我正在参加 FreeCodeCamp 的挑战。
我的目标是检查 name 是否是实际联系人的 firstName 并且给定的属性 (prop) 是该联系人的属性。
我面临的问题是in the first picture if 语句比较name === contacts[i][prop]
(contacts 是我循环遍历的对象所在的数组的名称)
返回 true 并且名称被记录,所以一切都很好。
还要注意这里:第一个 else-if 语句比较 name === contacts[i][prop],这在第二张图片中发生了变化。
这是第一张图片的代码:
// Setup
var contacts = [
{
firstName: 'Akira',
lastName: 'Laine',
number: '0543236543',
likes: ['Pizza', 'Coding', 'Brownie Points'],
},
{
firstName: 'Harry',
lastName: 'Potter',
number: '0994372684',
likes: ['Hogwarts', 'Magic', 'Hagrid'],
},
{
firstName: 'Sherlock',
lastName: 'Holmes',
number: '0487345643',
likes: ['Intriguing Cases', 'Violin'],
},
{
firstName: 'Kristian',
lastName: 'Vos',
number: 'unknown',
likes: ['JavaScript', 'Gaming', 'Foxes'],
},
];
function lookUpProfile(name, prop) {
for (i = 0; i < contacts.length; i++) {
if (name === contacts[i][prop] && contacts[i]) {
console.log(name);
return;
} else if (name === contacts[i][prop]) {
console.log(name);
console.log('No such contact');
return;
}
}
}
lookUpProfile('Kristian', 'firstName');
这是第二张图片中的代码-sn-p。这里唯一改变的是第一个 else-if 语句,我将 name === contacts[i][prop] 更改为 name !== contacts[i][prop]
function lookUpProfile(name, prop) {
for (i = 0; i < contacts.length; i++) {
if (name === contacts[i][prop] && contacts[i]) {
console.log(name);
return;
} else if (name !== contacts[i][prop]) {
console.log(name);
console.log('No such contact');
return;
}
}
}
但是,如果我将第一个 else-if 语句更改为 name !== contacts[i][prop],如您所见 in the second picture,,first else-if 语句将被执行,即使如此我根本没有更改 if 语句。这是为什么。?
【问题讨论】:
-
请勿发图,请将代码贴在这里。
-
您好,欢迎来到 Stack Overflow。恐怕我真的很难理解你的问题。您更改了第一行
else-if中的条件,因此它后面的块现在可能在以前可能没有执行过的情况下执行,这似乎是合理的。你能澄清一下你遇到的问题吗?尝试添加一些示例,说明您的函数应为各种输入值记录到控制台的内容以及它们当前记录的内容。 -
@LukeWoodward 嘿,我目前正在理解 if 语句,如果条件
name === contacts[i][prop] && contacts[i]为真,if 条件应该将名称记录到控制台。我不明白的是,为什么第一个 else-if 语句会被执行,即使 if 语句仍然是正确的。为什么第一个 else-if-statement 会被执行,即使 if-statement 仍然是正确的? -
对不起,我把自己说得太糟糕了,我的问题是:如果我在 else-if 语句中有条件
name === contacts[i][prop],则执行 if 语句。但是如果我将条件更改为name !== contacts[i][prop],else-if 语句就会被执行。为什么执行 else-if 语句而不是 if 语句,即使很难 if 语句仍然正确?
标签: javascript arrays loops object nested-loops