首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果else语句javascript返回false语句

如果else语句javascript返回false语句
EN

Stack Overflow用户
提问于 2021-06-19 23:58:34
回答 3查看 207关注 0票数 3

有人能帮我完成这段代码吗?我正在编写一个函数,它从一个对象中获取一个名称,并返回一个名称标签:“嗨!我是名字,我来自乡下。”

我试过这段代码

代码语言:javascript
运行
复制
const GUEST_LIST = {
    Randy: "Germany",
    Karla: "France",
    Wendy: "Japan",
    Norman: "England",
    Sam: "Argentina"
}

function greeting(name) {
  var x = Object.keys(GUEST_LIST);
  const array = Object.keys(GUEST_LIST)
    .map(function(key) {
        return GUEST_LIST[key];
    });
  
  
  var txt ="";
  for (let i in x)
    {
      if (name === x[i])
        {
          txt = "Hi I'm "+x[i] +", and I'm from " +array[i];  
        }
      else
        {
          txt = "Hi! I'm a guest";
        }
      
    }
     return txt;
}
console.log(greeting("Randy"))

但是它总是返回“嗨!我是客人”,除非我输入了Sam,

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-06-20 00:15:28

您的问题是,即使在从数组中找到与传递给函数的名称匹配的名称之后,for循环仍将继续循环到x数组中的其他名称上。这意味着在for循环的进一步迭代中,代码的else块将运行并覆盖以前设置的txt值。这就是"Sam“工作的原因,因为这是x数组中的姓,因此txt不会被for循环的进一步迭代覆盖。

关于您的代码,另一件需要注意的事情是循环不应用于迭代数组。它可能导致不必要的值被访问,因为它不只是遍历数组的索引,而是其他属性。

这么说,你的代码设计过度了。当前,您的对象存储键值对.关键是名称,价值是国家。对于对象中的每个键,可以使用括号表示法访问它。

代码语言:javascript
运行
复制
console.log(GUEST_LIST["Randy"]); // Germany

考虑到这个想法,您的name变量可以用作对象的键,然后可以用于获取国家。如果GUEST_LIST对象不包含您的键(即:尝试从对象访问键时返回的值为falsy),则可以返回默认的"Hi! I'm a guest"文本:

代码语言:javascript
运行
复制
const GUEST_LIST = {
  Randy: "Germany",
  Karla: "France",
  Wendy: "Japan",
  Norman: "England",
  Sam: "Argentina"
};

function greeting(name) {
  const country = GUEST_LIST[name];
  if(country)
    return "Hi I'm "+name +", and I'm from " +country; 
  else
    return "Hi! I'm a guest";
}
console.log(greeting("Randy"));

票数 5
EN

Stack Overflow用户

发布于 2021-06-20 00:26:49

为了理解我的意思,这里是您代码的工作版本。

代码语言:javascript
运行
复制
for (let i in x)
{
    if (name === x[i])
      {
        txt = "Hi I'm "+x[i] +", and I'm from " +array[i];
        break; // <---- stop the loop here when you find a match
      }
    else
      {
        txt = "Hi! I'm a guest";
      }

  }
   return txt;
}
票数 0
EN

Stack Overflow用户

发布于 2021-06-20 00:34:12

简单易懂,短小:

代码语言:javascript
运行
复制
const GUEST_LIST = {
    Randy: "Germany",
    Karla: "France",
    Wendy: "Japan",
    Norman: "England",
    Sam: "Argentina"
}


function greeting(name){
    return (GUEST_LIST[name]) ? 
     `Hi, I'm ${name} and I'm from ${GUEST_LIST[name]}` : 
     `Hi! I'm a guest`
}


console.log(greeting("Randy"))

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68051601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档