Const segment = { beginPoint: [ 3, 2 ], endPoint: [ 0, 0 ] };
const getMidpointOfSegment = (segment) => {
const {start : [x1, y1], end : [x2, y2]} = segment;
const middlePointOfSegment = [((x1 + x2)/2), ((y1 + y2)/2)];
return middlePointOfSegment;
};
Фото из редактора

Так работает:
{ start : [x1, y1], end : [x2, y2] } = { start : [3, 4], end : [5, 6] }
Так не работает:
{ start : [x1, y1], end : [x2, y2] } = { begin : [3, 4], end : [5, 6] }
Потому, что внутри функции у тебя распаковывается структура с полями start и end, а передаёшь ты структуру с полями beginPoint и endPoint
И зачем вообще такое переусложнение, если можно написать:
const getMidpointOfSegment = (seg) => {
return [(seg.beginPoint[0] + seg.endPoint[0]) / 2, (seg.beginPoint[1] + seg.endPoint[1]) / 2];
}
и это будет работать эффективнее твоего кода.
Ошибку уже объяснили, еще дополню тем как это делают по уму:
1. Хелперы обязаны быть гибкими, предельно простыми за счет одиночной ответственности, и иметь адекватное имя:
const calcMidPoints = (...pts) => pts.map(
([[x1, y1], [x2, y2]]) => [(x1 + y1) / 2, (x2 + y2) / 2]
);
2. Контроль данных (или ассершн) должен быть обязательно:
const segment = await somewhere.getSegment();
const points = segment && [...Object.values(segment)];
assertPointsArr(points); // бросает ошибку если данные факапнуты
3. Клиентский код должен быть читаем "по диагонали" - и пусть школота сколько угодно боится избыточной семантичности:
const midPoints = calcMidPoints([points]);
При этом, имен типа middlePointOfSegment следует избегать - так как, они как раз наоборот, снижают читаемость... вот это "OfSegment" должно быть и так понятно по контексту.
Ну и вообще, в продкоде хелперы обычно не отдельными функциями, а методами объекта состояния/сущности (крч, ООП).
Когда используется TS, ассершны не нужны - это уже вопрос характера, а не технической обоснованности (вот я предпочитаю чистый JS, а кто-то в себе настолько сомневается что без типизации даже по-большому сходить не может). Тесты, хотя бы интеграционные, нужны в любом случае: типизация или контроль выполнения это лишь половина обеспечения безопасности кода.
const getMidpointOfSegment = (segment) => {
const { start : [x1, y1], end : [x2, y2] } = segment;
const middlePointOfSegment = [((x1 + x2)/2), ((y1 + y2)/2)];
return middlePointOfSegment;
} ;
Я изменил названия переменных и ключей для большей наглядности.
Константа answer это результат работы другой функции. По этому и приходится для удобства упаковывать результат в, переменную а не передавать как безымянный объект в функцию getMidpointOfSegment.
Я не пойму почему ругается интерпретатор на то как я распаковываю segment. Переименование результата не меняет, все равно ругается.