NodeJS:比较一个数组的每个元素与所有其他元素与asynchronous过程?

我正在使用Resemble.js比较我的web应用程序中的图像。 我得到了一系列的图像(url)。 我想比较图像与数组中的每个其他图像,并计算该图像的唯一分数。 例如。 [url1,url2,url3,url4]所以最小的组合是

1 => 2 1 => 3 1 => 4 2 => 3 2 => 4 3 => 4 

但是,我也需要存储相反的组合值(尽pipe它们将是相同的)例如。 1 => 2将与2 => 1相同

问题我如何运行循环的东西

  for (var i = 1; i<=arr.length; i++) { for (var j = i+1; j <=arr.length; j++) { console.log(i + " => " + j); //async operation to compare two images } } 

使用Nodejs的asynchronous模块。 也不要再比较两个图像的相反组合结果。 而是使用已经计算的分数。

编辑

修改我现有的代码工作得很好,并给出正确的结果,也是非常快。 有什么办法可以进一步优化吗?

 var arr = [ {url: 'url1'}, {url:'url2'}, {url:'url3'} ]; function range(length) { var l = []; var counter = 0; for (var i = 0; i < length; i++) { for (var j = 0; j < length; j++) { if(i != j){ l[counter] = { i: i, j: j }; counter++; } } } return l; } var ijs = range(arr.length); var tempUS = 0; async.each(ijs, function (ij, cb) { if(ij.i != ij.j && ij.i > ij.j) { resemble(arr[ij.i].url).compareTo(arr[ij.j].url).onComplete(function(data) { console.log(data.misMatchPercentage); ij.score = data.misMatchPercentage; cb(); }); } else { cb(); } }, function(err){ if(err) { console.log(err); } else { for(var e = 0; e <arr.length; e++) { var z = 0; for(var f = 0; f < ijs.length; f++) { if(ijs[f].i == e) { if(ijs[f].score) { z = z+ parseFloat(ijs[f].score); } } else if(ijs[f].j == e) { if(ijs[f].score) { z = z+ parseFloat(ijs[f].score); } } } console.log(e, " ======== ", z); var avg = z/arr.length; arr[e].uniqueScore = avg; } console.log(arr); } }); 

如果你带入asynchronous模块,并执行:

 function range(length) { var l = []; var counter = 0; for (var i = 0; i < length; i++) { for (var j = i + 1; j < length; j++) { l[counter] = { i: i, j: j }; counter++; } counter++; } return l; } var ijs = range(arr.length); async.each(ijs, function (ij, cb) { resemble(arr[ij.i])compareTo(arr[ij.j]).onComplete(function(data){ // data; // do something with data cb(); // call the callback so we know we can move on /* { misMatchPercentage : 100, // % isSameDimensions: true, // or false getImageDataUrl: function(){} } */ }); }); 

编辑

更新了我的范围函数以排除重复项。