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;ilog(findInfo('Klara','color')一旦您从函数中返回,它就不会在下一次迭代中执行。不过你可以这样做

var用户=[{
“姓名”:“克拉拉”,
“姓氏”:“约翰逊”,
“颜色”: