Решила задачу, но мне кажется, что слишком сложно...в задаче указано, что можно решить без деструктуризации, но я пока не вижу, как.
Условие: Реализуйте функцию getTheNearestLocation(), которая находит ближайшее место к указанной точке на карте и возвращает его.
Параметры функции:
- locations – массив мест на карте. Каждое место - это массив из двух элементов, где первый элемент это название места, второй – точка на карте (массив из двух чисел x и y).
- point – текущая точка на карте. Массив из двух элементов-координат x и y.
//Пример данных и вывода
const locations = [
['Park', [10, 5]],
['Sea', [1, 3]],
['Museum', [8, 4]],
];
const currentPoint = [5, 5];
// Если точек нет, то возвращается null
getTheNearestLocation([], currentPoint); // null
getTheNearestLocation(locations, currentPoint); // ['Museum', [8, 4]]
//РЕШЕНИЕ
const getTheNearestLocation = (locations, currentPoint) => {
if (locations.length === 0) {
return null;
}
function getDistance([x2, y2], [x1, y1]) {
let distance = Math.sqrt(Math.abs(x2 - x1)**2 + Math.abs(y2 - y1)**2); //теорема Пифагора
return distance;
};
let arrOfDistances = [];
let [x2, y2] = currentPoint;
function arrOfDistance(locations) {
let i;
for (i = 0; i < locations.length; i++) {
let [place, [x1, y1]] = locations[i];
let distanceToEach = getDistance([x1, y1], [x2, y2]);
arrOfDistances.push(distanceToEach);
}
return arrOfDistances;
};
arrOfDistance(locations);
let min;
function minDistance(arrOfDistances) {
for (let i = 0; i < arrOfDistances.length - 1; i++) {
if (arrOfDistances[i] > arrOfDistances[i + 1]) {
min = arrOfDistances[i + 1];
} else {
min = arrOfDistances[i];
}
}
return min;
};
minDistance(arrOfDistances);
let index = arrOfDistances.indexOf(min);
let result = locations[index];
return result;
};