Как вернуть значение из объекта, если оно есть?

Есть такой код, который создает точки по порядку. Если их нет. Если есть - нужно просто вернуть ее.

   createPoint(): HTMLElement {
        const point = document.createElement('div');

        if (!this.points.controlPoints.point1) {
            return (this.points.controlPoints.point1 = point);
        } else {
            return this.points.controlPoints.point1;
        }

        if (!this.points.controlPoints.point2) {
            return (this.points.controlPoints.point2 = point);
        } else {
            return this.points.controlPoints.point2;
        }
    }

Как видно - дальше первого if - программа не пойдет. Логика такая: если первой точки нет - создать. Если есть - вернуть. Тоже самое для второй. Как можно улучшить этот код?

Пробовал так:

const point = document.createElement('div');

debugger;

if (!this.points.controlPoints.point1) {
    return (this.points.controlPoints.point1 = point);
}

if (!this.points.controlPoints.point2) {
    return (this.points.controlPoints.point2 = point);
}

if (this.points.controlPoints.point2) {
    return this.points.controlPoints.point2;
}

if (this.points.controlPoints.point1) {
    return this.points.controlPoints.point1;
}

Это создает первую и вторую точку - и вернеться только вторая.


Ответы (1 шт):

Автор решения: OPTIMUS PRIME

Нужно где-то хранить порядок необходимых точек. Надо бы сделать это где-то вне метода, но можно и в нем. Наверно, что-то типа того:

createPoint() {
  const CP = this.points.controlPoints;

  if (!CP._saved_point_names) {
    CP._saved_point_names = ['point1', 'point2'];
    // Единожды создает массив необходимых точек, если его еще нет.
  }

  /***/  
  let point_name = CP._saved_point_names.shift();
  // Получаем название точки, одновременно удалив её из начала массива.

  if (!point_name) throw New Error('Превышено количество предусмотренных вызовов.');
  
  return CP[point_name] || (CP[point_name] = document.createElement('div'));
  // Возвращает точку, если она существует, или создает новую и возвращает её же.
}
→ Ссылка