【发布时间】: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