我无法执行以下代码(我没有输出。甚至没有" 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没有错误。可能是什么问题?
答案 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循环结束。
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;