为什么indexOf在javascript中不起作用?

时间:2015-11-22 05:24:02

标签: javascript

我不确定我在这里做错了什么。我使用indexOf的第一个实例完全正常,但是当我第二次使用它时,它没有返回我期待的结果。

SELECT ini_range.start_date,
       end_range.end_date,
       ini_range.weekno,
       end_range.weekno
FROM 
    (
    SELECT r.* ,
          (SELECT count(distinct r2.weekno)
           FROM 
               (
                 SELECT *
                 FROM t_week 
                 WHERE weekno % 5  = 1
               ) r2
           WHERE r2.weekno <= r.weekno
          ) as rank
    FROM 
       (
         SELECT *
         FROM t_week 
         WHERE weekno % 5  = 1
       ) r
    ) ini_range
JOIN 
    (
    SELECT r.* ,
          (SELECT count(distinct r2.weekno)
           FROM 
               (
                 SELECT *
                 FROM t_week 
                 WHERE weekno % 5  = 0
                    or weekno = (SELECT max(weekno) FROM t_week)
               ) r2
           WHERE r2.weekno <= r.weekno
          ) as rank
    FROM 
       (
         SELECT *
         FROM t_week 
         WHERE weekno % 5  = 0
            or weekno = (SELECT max(weekno) FROM t_week)
       ) r
    ) end_range
  ON ini_range.rank = end_range.rank
如果arr [0]中没有来自arr [1]的元素,

变异应该返回false,否则返回true。

4 个答案:

答案 0 :(得分:3)

你的代码不起作用,因为当你说:

res.indexOf("f") != -1

这意味着:&#34;我找到了一个f&#34;,但是你正在对待它,好像它意味着&#34;我没有找到f&#34;。

如果您发现“f&#39;”,并且您返回true,则您希望返回false。翻转你的真假案例:

if (res.indexOf("f") != -1) {
   return false;
 } else {
   return true;
 }

你的for循环也是错误的,因为x从0开始,所以你需要转到&lt;长度不是&lt; =你的字符串的长度。

for (var x=0; x < arr[1].split("").length; x++) {

现在您的代码可以按照您的意愿运行。

答案 1 :(得分:2)

刚编辑了你的代码。点击<p>进行检查:

&#13;
&#13;
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"]));
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>Click me</p>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

如果稍微简化逻辑,那么更容易检查:

function mutation(arr) {
  return arr[1].split('').reduce(function(res, x) {
    return arr[0].indexOf(x) >= 0;
  }, true);
}

感谢Leon进行更正。

答案 3 :(得分:0)

我试图不理解你的逻辑,错误是:

  • 您尝试与数组[0]上的所有字符进行比较,而不仅仅是第一个字符。
  • 如果在数组[0]的第一个字符上找到一个等于的字符,则应该返回true。

正确的代码:

function mutation(arr) {
  res = "";
  for (var x=0; x<=arr[1].split("").length; x++) {
    if (arr[0].split("")[0].indexOf(arr[1].split("")[x]) !== -1) {
      return true;
    }
  }
  return false;
}