gpt4 book ai didi

javascript - FOR 循环内的嵌套 IF 仅适用于第一个值

转载 作者:行者123 更新时间:2023-11-28 17:35:37 24 4
gpt4 key购买 nike

我有一个对象数组,我想迭代它们。该数组的一个对象如下所示:

var people = [
{
"firstName": "YYY",
"lastName": "XXX",
"number": "123456789",
"attribute": ["strong", "quick", "stupid"]
},
{
"firstName": "AAA",
"lastName": "BBB",
"number": "9876543210",
"attribute": ["calm", "wise", "slow"]
},
{
"firstName": "CCC",
"lastName": "VVV",
"number": "158974528",
"attribute": ["brutal", "bad", "gentle"]
}

依此类推(数组中大约有 20 个对象)。

等等。我尝试编写一个函数来检查 firstName 是否存在于我的 people 数组中以及该属性是否是该联系人的属性。因此,如果我调用带有属性的函数:

lookUpProfile("YYY", "lastName");

它应该返回该对象的属性值。在这种情况下:["strong", "quick", "stupid"]

它实际上所做的是,我的函数仅检查第一个对象,然后停止...因此,仅当我使用与数组中第一个对象匹配的参数调用此函数时,它才有效。如果我像这样调用该函数:

lookUpProfile("CCC", "number");

它返回给我“没有这样的联系”。这里出了什么问题,循环只检查第一个对象?

函数代码如下:

function lookUpProfile(firstName, attribute){
for (i = 0; i < people.length; i++) {
if (firstName == people[i].firstName && firstName == people[i].firstName) {
return (people[i][attribute]);
}
else {
return "No such contact";
}
}

感谢大家的回复!这很有帮助。但我忘记提及一件事。我还想检查对象中是否存在给定的属性(属性)。

因此,如果我调用函数 lookUpProfile("YYY", "YourAGE");它会返回给我“没有这样的属性(property)”;

我的函数现在看起来像这样:

function lookUpProfile(firstName, prop){
for (i = 0; i < people.length; i++) {
if (firstName == people[i].firstName && people[i].hasOwnProperty(prop))
return (people[i][prop]);
else if(firstName != people[i].firstName) {
return "No such contact";
}
else if(people[i].hasOwnProperty(attribute) == false) {
return "No such property";
}

}

return "No such contact";

谢谢大家!我得到了工作解决方案。最后一个问题:您能否仅解释这一行:if (firstName == people[i].firstName)firstNameFound = true;?我不明白这一行 - 为什么在 IF 语句之后调用变量? ;).

最佳答案

这里发生的是 return 语句导致函数在到达它的地方退出。因此,在循环的第一个实例之后,由于条件不满足,if-else block 返回并且函数执行结束。

这里你想要做的是在循环完成并且执行了每个检查之后返回“no such contact”。因此:

function lookUpProfile(firstName, attribute){
for (i = 0; i < people.length; i++) {
if (firstName == people[i].firstName && firstName == people[i].firstName) {
return (people[i][attribute]);
}
}
return "No such contact";
}

此代码将执行循环,检查数组中每个人的条件。如果其中任何一个匹配,则返回,否则在全部检查完毕后返回。

编辑:由于您需要对最终返回语句进行条件限制,因此您需要使用 else block 来设置一个标志来标识未满足哪个条件:

function lookUpProfile(firstName, prop) {
var firstNameFound = false;
for (i = 0; i < people.length; i++) {
if (firstName == people[i].firstName && prop == people[i].hasOwnProperty(prop)) {
return (people[i][prop]);
}
else {
if (firstName == people[i].firstName) firstNameFound = true;
}
}
if (firstNameFound) return "No such property";
else return "No such contact";
}

编辑 2: 这里只需要一个标志。如果循环完成并且已设置,我们可以假设第二个条件失败,因为首先测试名称。

编辑 3:修正了一些错误。这是一个工作中的 JSFiddle,其代码与上面相同:https://jsfiddle.net/bfhev7gL/16/

编辑 4:要回答有关第二个 if 行的最后一个问题,变量(之前在初始化期间分配为 false)是如果满足对名字现有的检查,则分配值true。由于该条件的结果可以在一行中解析,因此我们可以简单地在其后面追加该行,而无需将其用大括号括起来。

在循环结束时,我们可以确认,如果它被分配,则至少有一个 firstName 匹配,但由于循环结束并且没有返回 propfirstName 匹配时不匹配。然后我们可以围绕它来调节错误返回;如果 firstName 匹配,我们通知用户 prop 不匹配,否则 firstName 未找到,我们可以通知用户相反。

关于javascript - FOR 循环内的嵌套 IF 仅适用于第一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49210876/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com