JavaScript条件语句未按预期工作
当firstName和property为true时,函数不显示属性-它只移动到“我的其他条件”并显示“找不到联系人”。然而,当我将上一次返回的“未找到联系人”放在“for”循环之外时,代码工作得非常好JavaScript条件语句未按预期工作,javascript,Javascript,当firstName和property为true时,函数不显示属性-它只移动到“我的其他条件”并显示“找不到联系人”。然而,当我将上一次返回的“未找到联系人”放在“for”循环之外时,代码工作得非常好 //Setup var contacts = [ { "firstName": "Akira", "lastName": "Laine", "number": "0543236543", "likes": ["Pizza",
//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 (var i = 0; i < contacts.length; i++){
if (contacts[i].firstName === firstName && contacts[i].hasOwnProperty(prop)){
return contacts[i][prop];
}else if (contacts[i].hasOwnProperty(prop) === false){
return "No such property";
}else if (contacts[i].firstName !== firstName){
return "No such contact";
}
}
// Only change code above this line
}
// Change these values to test your function
lookUpProfile("Kristian", "lastName");
//设置
var触点=[
{
“名字”:“Akira”,
“姓氏”:“莱恩”,
“编号”:“0543236543”,
“喜欢”:[“披萨”、“编码”、“布朗尼点数”]
},
{
“名字”:“哈利”,
“姓氏”:“波特”,
“编号”:“0994372684”,
“喜欢”:[“霍格沃茨”、“魔法”、“海格”]
},
{
“名字”:“夏洛克”,
“姓氏”:“福尔摩斯”,
“编号”:“0487345643”,
“喜欢”:[“有趣的案例”,“小提琴”]
},
{
“名字”:“克里斯蒂安”,
“姓氏”:“Vos”,
“编号”:“未知”,
“喜欢”:[“Javascript”、“游戏”、“狐狸”]
}
];
函数lookUpProfile(firstName,prop){
//仅更改此行下方的代码
对于(变量i=0;i
函数lookUpProfile(名字,道具){
//仅更改此行下方的代码
对于(变量i=0;i
如果条件从函数返回,阻止进一步查找,则删除两个条件当数组查找第0个元素时,条件将不满足,因此它将转到
3rd else if
块,从函数返回<代码>返回应该写在for循环之后。函数lookUpProfile(firstName,prop){
//仅更改此行下方的代码
对于(变量i=0;i
如果条件从函数返回,阻止进一步查找,则删除两个条件当数组查找第0个元素时,条件将不满足,因此它将转到
3rd else if
块,从函数返回<代码>返回应该在for循环之后写入。如果您仔细考虑,您的代码需要如下所示:
function lookUpProfile(firstName, prop) {
for (var i = 0; i < contacts.length; i++) {
const contact = contacts[i];
if (contact.firstName === firstName) {
if (contact.hasOwnProperty(prop)) return contact[prop];
else return "No such property";
}
}
return "No such contact";
}
或者,如果您发现三元(?
)运算符太难读取,则
if (!entry) return "No such contact";
if (!entry.hasOwnProperty(prop)) return "No such property";
return entry[prop];
如果您打算执行大量这些查找,请准备一个按firstname
索引的映射:
const map = new Map(contacts.map(contact => [contact.firstName, contact]));
现在,您可以在接近O(1)的时间内编写查找,如下所示:
仔细想想,您的代码需要如下所示:
function lookUpProfile(firstName, prop) {
for (var i = 0; i < contacts.length; i++) {
const contact = contacts[i];
if (contact.firstName === firstName) {
if (contact.hasOwnProperty(prop)) return contact[prop];
else return "No such property";
}
}
return "No such contact";
}
或者,如果您发现三元(?
)运算符太难读取,则
if (!entry) return "No such contact";
if (!entry.hasOwnProperty(prop)) return "No such property";
return entry[prop];
如果您打算执行大量这些查找,请准备一个按firstname
索引的映射:
const map = new Map(contacts.map(contact => [contact.firstName, contact]));
现在,您可以在接近O(1)的时间内编写查找,如下所示:
您正在检查每个联系人的名字,如果他们不相等,您将返回,因为不存在联系人。当kristin contact与第一个联系人不相等时,它将不返回任何联系人,并从for循环中存在 这就是为什么当你搬家时,他们会像预期的那样工作 将代码更改为以下内容
//设置
var触点=[{
“名字”:“Akira”,
“姓氏”:“莱恩”,
“编号”:“0543236543”,
“喜欢”:[“披萨”、“编码”、“布朗尼点数”]
}, {
“名字”:“哈利”,
“姓氏”:“波特”,
“编号”:“0994372684”,
“喜欢”:[“霍格沃茨”、“魔法”、“海格”]
}, {
“名字”:“夏洛克”,
“姓氏”:“福尔摩斯”,
“编号”:“0487345643”,
“喜欢”:[“有趣的案例”,“小提琴”]
}, {
“名字”:“克里斯蒂安”,
“姓氏”:“Vos”,
“编号”:“未知”,
“喜欢”:[“Javascript”、“游戏”、“狐狸”]
}];
函数lookUpProfile(名字,道具){
var=false;
var noProp=false;
//仅更改此行下方的代码
对于(变量i=0;i 控制台日志(res)代码>您正在检查每个联系人的名字,如果他们不相等,您将返回为不存在联系人,当kristin contact与第一个联系人不相等时,它将不返回任何联系人并从for循环中存在
这就是为什么当你搬家时,他们会像预期的那样工作
将代码更改为以下内容
//设置
var触点=[{
“名字”:“Akira”,
“姓氏”:“莱恩”,
“编号”:“0543236543”,
“喜欢”:[“披萨”、“编码”、“布朗尼点数”]
}, {
“名字”:“哈利”,
“姓氏”:“波特”,
“编号”:“0994372684”,
“喜欢”:[“霍格沃茨”,“魔法”,“哈