为什么indexOf在JavaScript中不起作用?
我不确定我在这里做错了什么。 我使用indexOf的第一个实例工作得很好,但是当我第二次使用它时,它没有返回我期待的结果。
function mutation(arr) {
//return arr;
res = "";
for (var x=0; x<arr[1].split("").length; x++) {
if (arr[0].indexOf(arr[1].split("")[x]) !== -1) {
res += "t";
} else {
res += "f";
}
}
// res = ttt
if (res.indexOf("f") !== -1) {
return true;
} else {
return false;
}
}
mutation(["hello", "hey"]);
// this returns true instead of false
mutation(["floor", "loo"]);
// returns false instead of true
如果来自arr [1]的元素不存在于arr [0]中,那么应该返回false,否则返回true。
你的代码不工作,因为当你说:
res.indexOf("f") != -1
这意味着:“我找到了一个f”,但是你对它的处理就好像它意味着“我找不到f”。
在你的情况下,如果你想找到一个'f',但你想返回true,那么你想返回false。 翻转你的真实和错误的情况:
if (res.indexOf("f") != -1) {
return false;
} else {
return true;
}
另外你的for循环是错误的,因为x从0开始,所以你需要去<length而不是<=你的字符串的长度。
for (var x=0; x < arr[1].split("").length; x++) {
现在你的代码可以按照你的想法工作。
刚刚编辑你的代码。 点击<p>
查看:
function mutation(arr) {
//return arr;
res = "";
for (var x=0; x< arr[1].split("").length; x++) {
res += arr[0].indexOf(arr[1].split("")[x]) > -1 ? 't' : 'f';
}
return res.indexOf('f') > -1;
}
$('p').click(function(){
alert(mutation(["hello", "hey"]));
alert(mutation(["floor", "loo"]));
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>Click me</p>
如果你简化了一下逻辑,那么检查起来就容易一些:
function mutation(arr) {
return arr[1].split('').reduce(function(res, x) {
return arr[0].indexOf(x) >= 0;
}, true);
}
感谢莱昂的更正。
链接地址: http://www.djcxy.com/p/18967.html上一篇: Why indexOf in javascript not working?
下一篇: what is the alternate function for indexOf for string in IE8?