我的代码是:
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的工作方式有关?我完全没有想法。
感谢任何帮助。
答案 0 :(得分:0)
正如在最初问题的评论中提到的那样,问题是我错过的逻辑错误。 i
在测试点时不等于1
,因此不会返回我预期的-1
。谢谢你的帮助。