2011-11-27 120 views
3

我正在尝试完成这项任务,我已经设置了代码,但是出现了一个问题。JavaScript循环访问数组

分配: “创建七个字符串值的数组,初始化为这些明星的名字:宝来, 毕宿五,天津四,织女星,牛郎星,天枢,和轩辕十四与创建一个数组另外七个 字符串值,初始化为星号为 的星座名称:大熊座,金牛座,天鹅座,天琴座,天鹰座,大熊座和狮子座。接下来,创建一个接受单个字符串参数的函数 。函数,通过第一个数组遍历 ,搜索星号,当找到星号时,返回第二个数组中该索引号中包含的值 。 r字,返回星号为 的星座。使用提示从访问者收集星号的名称,然后用该输入调用该函数。不要忘记包含代码 ,该代码在未找到恒星时执行。显示结果在屏幕上“

代码

var stars = ["Polaris", "Aldebaran", "Deneb", "Vega", "Altair", "Dubhe", "Regulus"]; 
var stars2 = ["Ursa Minor", "Taurus", "Cygnus", "Lyra", "Aquila", "Ursa Major", "Leo"]; 

function processStar(starName){ 
    for (var i=0; i < stars.length; i++) { 
     if(starName == stars[i]){ 
      return stars2[i]; 
     } else { 
      return "No star found!"; 
     } 
    } 
} 

var getStar = prompt("Input the star name."); 
var result = processStar(getStar); 
alert(result); 

问题

此代码的工作只为明星数组中的第一个值比其他任何事情。该数组的第一个元素(“Polaris”),函数返回false值。

+0

为什么你有'else'? – SLaks

+0

要将恒星映射到其星座,关联数组更有意义。 –

回答

5

您的条件声明是错误的。尝试一下。

var stars = ["Polaris", "Aldebaran", "Deneb", "Vega", "Altair", "Dubhe", "Regulus"]; 
var stars2 = ["Ursa Minor", "Taurus", "Cygnus", "Lyra", "Aquila", "Ursa Major", "Leo"]; 

function processStar(starName){ 
    for (var i=0; i < stars.length; i++) { 
    if(starName == stars[i]){ 
     return stars2[i]; 
    } 
} 

return "No star found!"; 

} 

var getStar = prompt("Input the star name."); 
var result = processStar(getStar); 
alert(result); 
5

在你的循环体内,你总是返回一个值,所以循环体只会执行一次。

+0

非常感谢!我现在明白了。 – Rafay