저는 JavaScript를 배우고 있으며 객체 속성, 루프 및 if / else 문에 대한 액세스를 결합하는 연습이 있습니다.
내 코드가 작동하지 않습니다. (작동하는) 솔루션은 if / else 문을 중첩하지만 그렇지 않으면 동일한 코드로 보입니다. 차이점을 이해하지 못합니다.
함수는 name이 실제 연락처의 firstName이고 주어진 속성 (prop)이 해당 연락처의 속성인지 확인해야합니다.
둘 다 참이면 해당 속성의 "값"을 반환합니다.
이름이 연락처와 일치하지 않는 경우 "No such contact"를 반환합니다.
prop이 이름과 일치하는 연락처의 유효한 속성과 일치하지 않으면 "No such property"를 반환합니다.
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 (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) {
return "No such contact";
} else {
return "No such property";
}
}
lookUpProfile("Sherlock", "likes");
//should return ["Intriguing Cases", "Violin"]
(작동하는)
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"]
두 가지 솔루션이 모두 작동 할 것으로 예상했지만 내 솔루션은 그렇지 않습니다. 왜?
이름이 주어진 이름과 같지 않으면 즉시 반환하므로 코드가 작동하지 않습니다.
따라서 프로그램을 실행하십시오.
i = 0, 연락처 [0] .name = Akira와 Sherlock을 비교합니다. 이름이 셜록과 같습니까? 아니 그렇지 않아. 따라서 첫 번째 if if (contacts[i].firstName === name && contacts[i].hasOwnProperty(prop)) {
조건이 실패합니다. 다음 조건으로 넘어갑니다.
else if (contacts[i].firstName !== name) {
return "No such contact";
그리고이 조건은 사실입니다. 그래서 우리는 즉시 돌아옵니다.
코드가 어떻게 조기에 반환되는지 보십니까? 그것은 우리가 실제로 전진하는 것을 허용하지 않습니다.
해야 할 일은 반환을 for 루프 외부에 배치하는 것입니다. 이것은 분명히 숙제 해결책이기 때문에 정확한 해결책을주지 않을 것입니다. 그러나 힌트는 당신을 앞으로 나아갈 것입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다