递归函数不工作Javascript

时间:2015-09-09 15:54:10

标签: javascript

我想检查数组元素中的第一个索引是否等于输入,如果我希望它增加并检查下一个索引,依此类推。但是我的代码只针对第一个index,递增然后再次返回第一个索引。为什么?

    var i=0

    function compareInput(array){


    if(result[i]==document.getElementById('input')){
         i++;
         compareInput(array);
    }
    else{
       console.log('not equal');
   }
 }

3 个答案:

答案 0 :(得分:0)

这是我将输入与递归函数进行比较的方法。 我使用函数作为返回因为 i变量范围,其中 i变量仅在compareInput函数中可用,可以在函数内部访问,即在compareInput函数内部。

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
<input id="input"></input>

<script type="text/javascript">

    function compareInput(array){
      var i=0;

      return function(array){
            if(array[i]== document.getElementById('input')){
                 i++;
                 compareInput(array);
                 console.log("equal %d",1);
            }
            else{
               console.log('not equal');
           }
      }
 }

var compare = compareInput();
compare([document.getElementById('input')]);
</script>
</body>
</html>

答案 1 :(得分:0)

在数组中查找字符串的一些不同方法。

function isInArray(i, a){
    return  !!~a.indexOf(i);
}

function isInArrayWithLoop(i, a) {
    var c;
    for (c = 0; c < a.length; c++) {
        if (i === a[c]) {
            return true;
        }
    }
    return false;
}

function isInArrayWithRecursion(i, a, c) {
    // initialize c with o if not given
    c = c || 0;
    // return false if not c < a.length
    // if c < a.length
    // then return the result of the vomparison with the specified element and i
    // if false, return the result of a new call of recusion with an increased counter
    return c < a.length && (i === a[c] || isInArrayWithRecursion(i, a, c + 1));
}

function isInArrayWithSome(i, a) {
    return a.some(function(aa) {
        return i === aa;
    });
}

// direct approach
document.write(isInArray('black', ['red', 'yellow', 'green', 'blue'])+'<br>');
document.write(isInArray('yellow', ['red', 'yellow', 'green', 'blue'])+'<br>');

// loop approach
document.write(isInArrayWithLoop('black', ['red', 'yellow', 'green', 'blue']) + '<br>');
document.write(isInArrayWithLoop('yellow', ['red', 'yellow', 'green', 'blue']) + '<br>');

// recursion approach
document.write(isInArrayWithRecursion('black', ['red', 'yellow', 'green', 'blue']) + '<br>');
document.write(isInArrayWithRecursion('yellow', ['red', 'yellow', 'green', 'blue']) + '<br>');

// some approach
document.write(isInArrayWithSome('black', ['red', 'yellow', 'green', 'blue']) + '<br>');
document.write(isInArrayWithSome('yellow', ['red', 'yellow', 'green', 'blue']) + '<br>');

答案 2 :(得分:-1)

每次调用compareInput时,都会设置TESTDB.ADMIN(ADMIN)=> \time Query time printout on TESTDB.ADMIN(ADMIN)=> select count(1) from test_table; COUNT ------- 7 (1 row) Elapsed time: 0m0.216s TESTDB.ADMIN(ADMIN)=> delete from test_table; DELETE 7 Elapsed time: 0m1.532s ,因此if将始终为var i = 0;。 此外,if (result[0] == document.getElementById('input'))将为您提供元素对象,而不是值,我想您的数组是由值组成的。

document.getElementById('').value;超出职能范围。