我正在开设免费代码营的课程,我被困在某个项目上。我不认为我的循环工作正常,因为它不会检索它应该的信息。
说明如下:
我们有一组代表不同人的对象 联系人列表。
一个lookUpProfile函数,它将firstName和一个属性(prop)作为 已为您预先写好了论据。
该函数应检查firstName是否为实际联系人 firstName和给定属性(prop)是该联系人的属性。
如果两者都为真,则返回该属性的“值”。
如果firstName与任何联系人不对应,则返回“No such 联系“
如果道具与任何有效的属性不对应,则返回“否” 这样的财产“
//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(firstName, prop){
// Only change code below this line
for (i = 0; i < contacts.length; i++) {
if (contacts[i].hasOwnProperty(firstName)) {
if (contacts[i].firstname === prop) {
return contacts[i].firstName;
}
else {
return "No such property";
}
}
else {
return "No such contact";
}
}
// Only change code above this line
}
// Change these values to test your function
lookUpProfile("Akira", "likes");
我不确定遗憾的是我的问题在哪里,我们非常感谢任何帮助。
答案 0 :(得分:1)
您的代码有几件事情不对。
首先,hasOwnProperty
没有按照您的想法行事。阅读the docs on that
此外,Javascript区分大小写,并将未定义的属性报告为类型undefined
的值。因此,以下if
并不能完全符合您的要求,而不会产生错误。
if (contacts[i].firstname === prop) {
return contacts[i].firstName;
}
请注意第一个 N ame属性的不同大小。
尝试以下代码段:
console.log(typeof {}.doesNotExist);
它会显示为undefined
。
最后但同样重要的是:您可能从学习如何调试中获益更多,而不是这些答案:)可以通过在代码中的任何位置添加console.log
调用来完成一些简单的调试。更好的是利用浏览器的调试或使用IDE进行调试。
答案 1 :(得分:1)
检查hasOwnProperty时,请在引号内使用firstName。此外,JavaScript是一种区分大小写的语言。 firstName和firstname被视为不同的变量。您在代码中使用 if(contacts [i] .firstname === prop),而实际上它应该是 if(contacts [i] .firstName === firstName)。并且,请比较正确的财产。你将firstName与道具进行比较,我不明白你真正想要做什么。
//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(firstName, prop){
// Only change code below this line
for (i = 0; i < contacts.length; i++) {
if (contacts[i].hasOwnProperty('firstName')) {
if (contacts[i].firstName === prop) {
return contacts[i].firstName;
}
else {
return "No such property";
}
}
else {
return "No such contact";
}
}
}
答案 2 :(得分:1)
试试这个会起作用:
function lookUpProfile(firstName, prop){
// Only change code below this line
for (i = 0; i < contacts.length; i++) {
if (contacts[i].hasOwnProperty(prop)) {
if (contacts[i].firstName == firstName) {
return contacts[i][prop];
}
else {
return "No such contact";
}
}
else {
return "No such property";
}
}
// Only change code above this line
}
// Change these values to test your function
var data = lookUpProfile("Akira", "likes");
console.log(data);
工作小提琴:https://jsfiddle.net/yp8b2tg7/
所有要求均已满足:
答案 3 :(得分:0)
在大多数情况下,罗希特的回答是正确的。
如果我运行测试用例,
"No such contact"
它将返回
if (contacts[i].firstName == firstName) {}
这不是预期的结果。
问题出在
的'else'部分function lookUpProfile(firstName, prop){
for (i = 0; i < contacts.length; i++) {
if (contacts[i].hasOwnProperty(prop)) {
if (contacts[i].firstName == firstName) {
return contacts[i][prop];
}
}
else {
return "No such property";
}
}
return "No such contact";
}
var data = lookUpProfile("Sherlock", "likes");
console.log(data);
选中“联系人”中的第一项时,仅在找到匹配的联系人时才返回该值。否则忽略它并循环遍历“联系人”中的项目。一切都完成后,我们可以返回“没有这样的联系人”
我已经修改了下面的功能 - 试试这个,
<configSections>
<sectionGroup name="Fruits">
<section name="Colors" />
</sectionGroup>
</configSections>
<Fruits>
<add key="apple" value="red" />
<add key="banana" value="yellow" />
</Fruits>
更新了JSFiddle - Knowing when AJAX has loaded in UIWebView
答案 4 :(得分:0)
最好首先检查房产,如Rohit的答案。如果您想首先检查名称,可以试试这个,虽然不那么优雅:
function lookUpProfile(name, prop){
var count = 0;
for (i=0; i <contacts.length; i++) {
if (contacts[i].firstName == name) {
if (contacts[i].hasOwnProperty(prop)) {
return contacts[i][prop];
}
else {
return "No such property";
}
} else {
count += 1;
}
}
if (count == contacts.length) {
return "No such contact";
}
}
答案 5 :(得分:0)
function lookUpProfile(firstName, prop){
var i, found=0;
for (i = 0; i < contacts.length; i++) {
if (contacts[i].firstName == firstName) {
found=1;
if (contacts[i].hasOwnProperty(prop)) {
return contacts[i][prop];
} else {
return "No such property";
}
}
}
return "No such contact"; //return this if contact not found
}