Javascript 通过对象的迭代未返回true
有人能告诉我我做错了什么吗 该函数仅返回第一个用户的信息。从来没有第二次。如果两个参数都为真,则它应该返回第二个参数的任何值Javascript 通过对象的迭代未返回true,javascript,Javascript,有人能告诉我我做错了什么吗 该函数仅返回第一个用户的信息。从来没有第二次。如果两个参数都为真,则它应该返回第二个参数的任何值 var users = [{ "name": "Klara", "surname": "Johnson", "color": "Yellow", "preference": ["Hot", "Double", "Sugar free"] }, { "name": "D
var users = [{
"name": "Klara",
"surname": "Johnson",
"color": "Yellow",
"preference": ["Hot", "Double", "Sugar free"]
},
{
"name": "Daenerys",
"surname": "Targaryen",
"color": "Salmon",
"preference": ["Iced", "Single", "Chocolate"]
}
];
function findInfo(name, info) {
for (i = 0; i < users.length; i++) {
if (name === users[i].name) {
if (users[i].hasOwnProperty(info)) {
return users[i][info]
} else {
return "No such info"
}
} else {
return "no such name"
}
}
}
console.log(findInfo('Klara', 'adsf'))
console.log(findInfo('Daenerys', 'color')) //Expected "Salmon", but log "No such name"
console.log(findInfo('Klara', 'color')) // Yellow
var用户=[{
“姓名”:“克拉拉”,
“姓氏”:“约翰逊”,
“颜色”:“黄色”,
“首选项”:[“热”、“双份”、“无糖”]
},
{
“名称”:“丹妮莉丝”,
“姓氏”:“坦格利安”,
“颜色”:“鲑鱼”,
“首选项”:[“冰的”、“单人的”、“巧克力的”]
}
];
函数findInfo(名称、信息){
对于(i=0;i
这是因为您可能在检查所有元素之前返回for循环,如果找不到用户,您应该在循环结束时返回,总之,一种较短的方法是:
函数findInfo(名称、信息){
const user=users.find(e=>e.name==name);
如果(!user)返回“无此名称”;
返回user.hasOwnProperty(info)和&user[info]| |“无此类信息”;
}
这是因为您可能在检查所有元素之前返回for循环,如果找不到用户,您应该在循环结束时返回,总之,一种较短的方法是:
函数findInfo(名称、信息){
const user=users.find(e=>e.name==name);
如果(!user)返回“无此名称”;
返回user.hasOwnProperty(info)和&user[info]| |“无此类信息”;
}
这是因为每当在函数中遇到return语句时,函数将返回指定的值并退出函数。在您的例子中,它正在检查用户的名称[i]是否与从参数接收到的名称相同。如果是,它将检查是否有名为“info”的属性。由于没有info属性,它只是返回“no property found”并退出函数,而不检查其他用户。您必须首先遍历整个数组,如果仍然未找到用户,则返回“未找到用户”。仅当第一个用户的名称等于参数时,代码才会进行检查。如果不相等,则在遍历数组的其他元素之前返回“no-this-name”
工作代码:
var users = [{
"name": "Klara",
"surname": "Johnson",
"color": "Yellow",
"preference": ["Hot", "Double", "Sugar free"]
},
{
"name": "Daenerys",
"surname": "Targaryen",
"color": "Salmon",
"preference": ["Iced", "Single", "Chocolate"]
}
];
function findInfo(name, info) {
for (var i = 0; i < users.length; i++) {
if (name === users[i].name) {
if (users[i].hasOwnProperty(info)) {
return users[i][info]
} else {
return "No such info"
}
}
}
//if you reach here that means that you have not found user in entire array
return "no such name";
}
console.log(findInfo('Daenerys', 'asdf'))
var用户=[{
“姓名”:“克拉拉”,
“姓氏”:“约翰逊”,
“颜色”:“黄色”,
“首选项”:[“热”、“双份”、“无糖”]
},
{
“名称”:“丹妮莉丝”,
“姓氏”:“坦格利安”,
“颜色”:“鲑鱼”,
“首选项”:[“冰的”、“单人的”、“巧克力的”]
}
];
函数findInfo(名称、信息){
对于(var i=0;i
这是因为每当在函数中遇到return语句时,函数将返回指定的值并退出函数。在您的例子中,它正在检查用户的名称[i]是否与从参数接收到的名称相同。如果是,它将检查是否有名为“info”的属性。由于没有info属性,它只是返回“no property found”并退出函数,而不检查其他用户。您必须首先遍历整个数组,如果仍然未找到用户,则返回“未找到用户”。仅当第一个用户的名称等于参数时,代码才会进行检查。如果不相等,则在遍历数组的其他元素之前返回“no-this-name”
工作代码:
var users = [{
"name": "Klara",
"surname": "Johnson",
"color": "Yellow",
"preference": ["Hot", "Double", "Sugar free"]
},
{
"name": "Daenerys",
"surname": "Targaryen",
"color": "Salmon",
"preference": ["Iced", "Single", "Chocolate"]
}
];
function findInfo(name, info) {
for (var i = 0; i < users.length; i++) {
if (name === users[i].name) {
if (users[i].hasOwnProperty(info)) {
return users[i][info]
} else {
return "No such info"
}
}
}
//if you reach here that means that you have not found user in entire array
return "no such name";
}
console.log(findInfo('Daenerys', 'asdf'))
var用户=[{
“姓名”:“克拉拉”,
“姓氏”:“约翰逊”,
“颜色”:“黄色”,
“首选项”:[“热”、“双份”、“无糖”]
},
{
“名称”:“丹妮莉丝”,
“姓氏”:“坦格利安”,
“颜色”:“鲑鱼”,
“首选项”:[“冰的”、“单人的”、“巧克力的”]
}
];
函数findInfo(名称、信息){
对于(var i=0;i
一旦退出函数,它就不会在下一次迭代中执行。不过你可以这样做
var用户=[{
“姓名”:“克拉拉”,
“姓氏”:“约翰逊”,
“颜色”:“黄色”,
“首选项”:[“热”、“双份”、“无糖”]
},
{
“名称”:“丹妮莉丝”,
“姓氏”:“坦格利安”,
“颜色”:“鲑鱼”,
“首选项”:[“冰的”、“单人的”、“巧克力的”]
}
];
函数findInfo(名称、信息){
var userFound=“未找到用户”;
var userInfo=“无信息”;
对于(i=0;i log(findInfo('Klara','color')代码>一旦您从函数中返回,它就不会在下一次迭代中执行。不过你可以这样做
var用户=[{
“姓名”:“克拉拉”,
“姓氏”:“约翰逊”,
“颜色”: