【问题标题】:Unexpected result of an if statement evaluationif 语句评估的意外结果
【发布时间】:2016-10-25 21:42:44
【问题描述】:

我的代码是:

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   

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

感谢您对此的任何帮助。

【问题讨论】:

  • i 不是1,实际上是2,数组只包含[0, 1],因此不包括i
  • i 在此时为 2,不在 [0,1] 中。
  • 当然。谢谢。需要使用arr[i] 虽然不知道为什么不赞成?是一个真正的学习错误。

标签: javascript if-statement indexof


【解决方案1】:

正如最初问题的 cmets 中所述,问题是我错过的逻辑错误。 i 在测试时不等于 1,因此不会返回我预期的 -1。感谢您的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多