Учитывая массив массивов, представляющих точки, я хочу найти минимальное расстояние между точками и вернуть это расстояние и эту начальную точку. Я использую lodash и хотел бы быть максимально функциональным.расчет для каждого элемента массива
У меня есть массив массивов:
var all = [[1,2], [3,4], [4,5]];
У меня также есть объект, который имеет текущее минимальное расстояние и текущий массив:
var cur_min = {'current_min': 10, 'point': [9,10]};
Я хочу найти минимальное расстояние между всеми точки в моем массиве, и если это расстояние меньше текущего_min в моей переменной cur_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.
Я не могу себе представить, зацикливание за тот же массив в два раза является эффективный способ решения этой проблемы. Я попытался переписать эту функцию, используя различные функции lodash, такие как _.forEach и _.reduce, но я не могу найти способ не зацикливать дважды над одним и тем же массивом. Есть ли более быстрый способ решить эту проблему?
пример вывода для приведенного выше кода:
{ current_min: 1.222450611061632, loc: [ 1, 2 ] }
Можете ли вы опубликовать пример вывода? – elclanrs
Не знаете, как вы определяете «эффективность», но быстрее говорите быстрее, чтобы вручную перебирать массив, чем использовать функции итератора и все такое. Особенно, когда вы ожидаете 6 пар. –
Я хочу, чтобы он мог принимать любой массив длины. 6 - пример. Цикл по одному и тому же массиву дважды не может быть эффективным. – Ptrkcon