【发布时间】:2015-07-16 06:26:59
【问题描述】:
我有一个数组,arr = [0, 0, 0, 0, 1, 1]。传递给函数的参数包含此数组以及在此示例中恰好为 1 的数值。我的函数是成对调用的,看起来像这样:
function pairwise(arr, arg) {
...some code ...
}
pairwise([0, 0, 0, 0, 1, 1], 1);
如果数组中的元素对加起来等于传递给函数的第二个参数,那么我需要添加每个唯一对的索引并返回索引的总和。对于此示例,总和将为 10,因为索引 0 和 4 加为 1,并且索引 1 和 5 加为 1,因此索引之和为 0 + 4 + 1 + 5 = 10。我无法计算同一个索引两次。
在我的函数中,我在一个遍历数组长度的 for 循环中从 arr[i] 中减去 arg。然后我从减法中取出结果并使用 arr.indexOf(result) 来查找索引对(如果存在)。一切正常,直到我遇到这个问题。 indexOf 仅查找第一次出现,当我运行我的代码时,它不计算 arr 中的第二个 1,因此我无法获得第二对。我的总和是 4,而应该是 10。这是我的其余代码:
function pairwise(arr, arg) {
var array = [];
if (arr.length != 0) {
for (var i=0; i<arr.length; i++) {
if (arr.indexOf(arg - arr[i]) != -1) {
if (array.indexOf(i) === -1 && array.indexOf(arr.indexOf(arg-arr[i])) === -1) {
if (i !== arr.indexOf(arg - arr[i])) {
array.push(i,arr.indexOf(arg - arr[i]));
}
}
}
}
} else {
return 0;
}
console.log (array);
return array.reduce(function(a,b) {return a+b;});
}
pairwise([0, 0, 0, 0, 1, 1], 1);
我还将结果推送到数组中,因此我仅限于 Array.prototype 方法。我尝试寻找其他方法来使用,但我找不到任何我可以用我正在做的事情来实现的方法。也许您知道一种更简单的方法来做到这一点?我的问题是,有没有办法查看 indexOf 的第一个索引匹配。我应该使用其他方法来解决我的解决方案吗?
【问题讨论】:
标签: javascript arrays indexof