我正在做一个练习,其中包括检查两个单词是否具有相同的字母。到目前为止,我的代码已通过所有测试但只有一个。我想了解原因。
这就是我所拥有的:
function mutation(arr) {
var first = arr[0].toLowerCase();
var second = arr[1].toLowerCase();
for(var i = 0; i < first.length; i++){
var tmp = first.indexOf(second[i]);
if(tmp < 0){
return false;
}else {
return true;
}
}
}
传递的唯一例外是&#34;你好&#34;并且&#34;嘿&#34;。 有人可以解释我错过了什么吗? 提前致谢
答案 0 :(得分:0)
测试只检查一个方向。如果你有这样的话:&#39;你好&#39;和&#39; hhhhh&#39;那么所有的测试都会通过,因为它会检查所有的测试结果。&#39; h&#39;在'你好'里面对于每个循环迭代。
答案 1 :(得分:0)
您的退货声明是问题所在。不要使用返回true / false,而是在其中放置一个带有i变量的console.log,并且您将看到您的循环只运行一次。一旦达到return语句,就可以退出该函数。
您在循环中遇到的另一个问题是,您需要先使用&#34;首先&#34;是一个较短的单词,否则,当循环到达hhhhhhhello
的第4个字母时,它无法检查hey
的第4个字母,因为它只有3个,所以你要这么做得到一个错误(这不会发生在每个场景中,例如你好/嘿,但你也需要为此做好计划。)
您可以保留return false;
部分。但是完全删除else {return true;}并为你专门到达循环结束时创建一个条件。以下是一种实现此目的的方法示例。
function mutation(arr) {
var first = arr[0].toLowerCase();
var second = arr[1].toLowerCase();
for (var i = 0; i < first.length; i++) {
var tmp = first.indexOf(second[i]);
if (tmp < 0) {
$("#letters").append(second[i] + " is NOT in " + first + "<br>");
return false;
} else {
$("#letters").append(second[i] + " is in " + first + "<br>");
}
}
}
mutation(["hello", "hey"]);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="letters"></div>
&#13;