【发布时间】:2018-08-19 00:51:15
【问题描述】:
我有一个对象数组,我想遍历它们。该数组的一个对象如下所示:
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 以及该属性是否是该联系人的属性。 所以如果我用属性调用函数:
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");
它会返回“没有这样的财产”;
我的函数现在看起来像这样:
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 语句之后调用变量? ;)。
【问题讨论】:
-
如果
if ( ... )中的条件(检查同一件事两次 O.o)不满足会发生什么?关键字return的用途是什么? -
"在这种情况下:
["strong", "quick", "stupid"]" 应该是 "在这种情况下:"XXX"" -
这是我代码中的错字。正确的在我的帖子底部给出:)。因此:如果 firstName 是对象的名称,并且该对象具有函数中给定的属性,则它应返回该属性。如果数组中不存在 firstName - 返回应为“No such contact”。如果对象中不存在该属性 - 返回“没有此类属性”。
标签: javascript arrays object for-loop if-statement