给定一个代表点的阵列数组,我想要找到点之间的最小距离并返回该距离和该起点。我正在使用lodash,并希望尽可能地发挥功能。计算每个阵列成员
我有数组的数组:
var all = [[1,2], [3,4], [4,5]];
我也有具有与当前的最小距离和当前阵列的对象:
var cur_min = {'current_min': 10, 'point': [9,10]};
我想找到所有的之间的最小距离我的数组中的点,如果该距离小于我的cur_min变量中的current_min,它将被更新。我已经提出了以下情况:
function find_new_min(current, arr) {
return _.transform(arr, function(result, a) {
_.forEach(arr, function(b) {
if (!_.isEqual(a,b)) {
var d = get_distance(a,b);
if (d<result.current_min) {
result.current_min = d;
result.point = a;
}
}
});
}, _.clone(current));
}
因为得到一个点之间的距离我期待6不同对阵列的与本身是0
我无法想象循环相同的阵列上两次是有效的方法来解决这个问题。我试着用_.forEach和_.reduce这样的各种lodash函数来重写这个函数,但是我找不到一种方法不能在同一个数组上循环两次。有没有更快的方法来解决这个问题?
的示例输出用于上述代码是:
{ current_min: 1.222450611061632, loc: [ 1, 2 ] }
你可以发布一个输出的例子吗? – elclanrs 2014-08-29 01:31:55
不知道你如何定义“效率”,而是用速度更快地手动迭代数组,而不是使用迭代器函数和所有那些。特别是当你期待6双。 – 2014-08-29 01:41:40
我希望它能够采取任何长度的数组。 6只是一个例子。在相同的阵列上循环两次无法高效。 – Ptrkcon 2014-08-29 01:47:50