我刚刚开始学习javascript,这是我关于stackoverflow的第一个问题,所以如果我以错误的方式接近这个问题,请随时批评我。
var divisibleByThreePairSum = function(array) {
var pairs = [];
for (var i = 0; i < array.length; i++) {
for (var j = i++; j < array.length; j++) {
var sum = array[i] + array[j];
if (sum % 3 === 0) {
pairs.push([i, j]);
}
}
}
return pairs;
}
console.log(divisibleByThreePairSum([3,1,0,2,1,3,2,0]));
这给了我答案;
[ [ 1, 3 ], [ 1, 6 ], [ 3, 4 ], [ 5, 5 ], [ 5, 7 ], [ 7, 7 ] ]
[Finished in 0.2s]
第二个&#34; for&#34;循环,我格式化它,(j = i ++),以避免重复像[1,3],[3,1],但我似乎无法摆脱像[5,5]这样的对,[7,7]。是否有任何可能的方法来格式化代码,以便不会发生这种情况?如果不正当地提出要求,我再次道歉;我肯定会更频繁地使用这个网站,所以如果我做错了什么,请告诉我。问题格式&#34;明智的,谢谢!
答案 0 :(得分:0)
问题是j = i++
。这会将i
的值分配给j
,然后增加i
的值。这也将导致跳过i
的替代值,因为它增加了两次。
for(var i = 0; i< 5; i++){
for(var j = i++; j< 5; j++){
console.log(i,j)
}
}
&#13;
您应该使用j=i+1
。这将发送下一个值,不会增加i
var divisibleByThreePairSum = function(array) {
var pairs = [];
for (var i = 0; i < array.length; i++) {
for (var j = i+1; j < array.length; j++) {
var sum = array[i] + array[j];
if (sum % 3 === 0) {
pairs.push([i, j]);
}
}
}
return pairs;
}
console.log(divisibleByThreePairSum([3, 1, 0, 2, 1, 3, 2, 0]));
&#13;