給定一個代表點的陣列數組,我想要找到點之間的最小距離並返回該距離和該起點。我正在使用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