尝试创建一个函数,在Javascript中传递首字母时显示名称

时间:2015-07-18 20:56:49

标签: javascript

尝试运行javascript代码,该代码将首字母与对象数组中的相应名称相匹配。

我无法执行以下代码(我没有输出。甚至没有" Not Found"消息。此外,没有显示任何错误。)

var chars = [
    {name:"Eddard Stark", alias: ["Hand of the King"]},
    {name:"Robert Baratheon", alias:["King"]}
];

function getName(initials)
{
    for(var x in chars){
        var check= str.split(chars[x].name);
        var flag=1;        
        for(var y in check){
            if(check[y][0]!==initials[y]){
                flag=0;
        }
    }
    if(flag)
        window.alert(chars[x].name+" "+chars[x].alias);
    else    
        window.alert("Not Found");
    }
}

getName("ES");

我在JSFiddle中尝试了它,以及在Internet Explorer(11)中打开的带有<script>标记的HTML文件。 JSHint没有错误。可能是什么问题?

3 个答案:

答案 0 :(得分:1)

您似乎误解了.spilt功能。

var chars = [
    {name:"Eddard Stark", alias: ["Hand of the King"]},
    {name:"Robert Baratheon", alias:["King"]}
];

function getName(initials){
    for(var x in chars){
        var check = chars[x].name.split(' ');
         if((check[0][0]+check[1][0]).toUpperCase()==initials.toUpperCase())
           return alert(chars[x].name+" "+chars[x].alias);
    }
    alert("Not Found");   
}

getName("RB");

答案 1 :(得分:0)

这似乎工作正常:

var chars = [
    {name:"Eddard Stark", alias: ["Hand of the King"]},
    {name:"Robert Baratheon", alias:["King"]}
];

function getName(initials)
{
    var output;
    for(var x in chars){
        var check= chars[x].name.split(" ");
        var flag=1;        
        for(var y in check){
            if(check[y][0]!==initials[y])
                flag=0;
        }
        if(flag) {
            window.alert(chars[x].name+" "+chars[x].alias);
            return;
        }               
    }
    window.alert("Not Found");
}

getName("ES");

这个程序现在正在做的是它将在列表中搜索匹配项,如果找到匹配项,它将显示结果,然后return;否则,它将继续查找匹配项如果无法找到,则会发出Not Found!条消息。

答案 2 :(得分:0)

各种错误:修复split()函数语法,使用boolean for flag,使用charAt()从字符串中获取字符(你不应该像对待数组一样),尽快打破y循环找到字符不匹配,找到匹配后立即返回名称,而不等待x循环结束。

&#13;
&#13;
var chars = [
    {name: "Eddard Stark", alias: "Hand of the King"},
    {name: "Robert Baratheon", alias: "King"}
];

function getName(initials) {
    for (var x in chars) {
        var check = chars[x].name.split(" ");
        var flag = true;        
        for (var y in check) {
            if (check[y].charAt(0) !== initials.charAt(y)) {
                flag = false;
                break;
            }
        }
        if (flag) return chars[x].name + ", " + chars[x].alias;
    }
    return "not found";
}

alert("ES: " + getName("ES"));
alert("XY: " + getName("XY"));
&#13;
&#13;
&#13;