divisibleByThreePairSum,我得到一对重复

时间:2016-10-28 07:41:12

标签: javascript arrays

我刚刚开始学习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;明智的,谢谢!

1 个答案:

答案 0 :(得分:0)

问题是j = i++。这会将i的值分配给j,然后增加i的值。这也将导致跳过i的替代值,因为它增加了两次。

&#13;
&#13;
for(var i = 0; i< 5; i++){
  for(var j = i++; j< 5; j++){
    console.log(i,j)
  }
}
&#13;
&#13;
&#13;

您应该使用j=i+1。这将发送下一个值,不会增加i

的值

&#13;
&#13;
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;
&#13;
&#13;