if语句评估的意外结果

时间:2016-10-25 21:42:44

标签: javascript if-statement indexof

我的代码是:

function pairwise(arr, arg) {
    var retArr = [];

    if (arr.length === 0) {
        return 0;
    }

    var reduction = arr.reduce(function(previous, current, index) {
        for (var i = index; i < arr.length; i++) {

            console.log("before " + retArr);
            console.log(retArr.indexOf(i) === -1);

            if (previous + arr[i] === arg && retArr.indexOf(i) === -1) {
                retArr.push(index - 1, i);

                console.log("after " + retArr);
                console.log(retArr.indexOf(i) === -1);

                return current;
            }
        }

        return current;
    });

    console.log("Greg " + retArr);

    retArr = retArr.reduce(function(prev, lst) {
        return prev + lst;
    });

    return retArr;
}

pairwise([1, 1, 1], 2);

这是一个JS程序,用于检测数组中的数字对,这些数字加起来形成第二个参数。然后它返回对的索引之和。一旦索引被使用,它就无法重复使用。对于给定的调用,我需要返回1但当前正在获得4. console.log输出为: -

before 
true
after 0,1
false
before 0,1
true
after 0,1,1,2
false
Greg 0,1,1,2   

我无法理解为什么第三个布尔值返回true。肯定它应该返回false,因为1已经在retArr数组中。谁能告诉我为什么不是这样呢?是由于retArr变量的范围还是与reduce的工作方式有关?我完全没有想法。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

正如在最初问题的评论中提到的那样,问题是我错过的逻辑错误。 i在测试点时不等于1,因此不会返回我预期的-1。谢谢你的帮助。