Как написать метод, подсчитывающий среднее значение одного из свойств во всех экземплярах класса?

Есть класс User, который устанавливает возраст для каждого нового пользователя. Нужно написать метод averageAge(), который возвращает средний возраст всех созданных пользователей.

Я думаю (но могу ошибаться) это реализовывается через static, но не могу сообразить как именно. Помогите, пожалуйста.

class User {
  constructor(age) {
    this.age = age;
  }
  
  get age() {
    return this._age;
  }
  
  set age(value) {
    this._age = value;
  }
  
  static averageAge() {
    // some code
  }
}

const john = new User(25);
const pete = new User(15);

User.averageAge();   // должно вернуть 20

Если возраст изменить, то averageAge пересчитывается.

pete.age = 19;

User.averageAge();   // теперь будет 22

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

Автор решения: ksa

Как вариант...

class User {
    static a = []
    constructor(age) {
        User.a.push(age)
        this.age = age;
    }

    get age() {
        return this._age;
    }

    set age(value) {
        if (this._age != undefined) {
            const i = User.a.indexOf(this._age)
            if (i === -1) throw new Error('Проблема с возрастом') 
            User.a[i] = value
        }
        this._age = value;
    }

    static averageAge() {
        return User.a.reduce((c, v) => c + v) / User.a.length
    }
}

const john = new User(25);
const pete = new User(15);

console.log(User.averageAge());   // должно вернуть 20

pete.age = 19;

console.log(User.averageAge());   // теперь будет 22
→ Ссылка
Автор решения: ksa

Реализовал совет что давали в комментарии к вопросу, без массива

class User {
    static st = {cnt: 0, sum: 0}
    constructor(age) {
        ++User.st.cnt
        this.age = age;
    }

    get age() {
        return this._age;
    }

    set age(value) {
        User.st.sum += this._age === undefined ? value : value - this._age
        this._age = value;
    }

    static averageAge() {
        return User.st.cnt ? User.st.sum / User.st.cnt : null
    }
}

const john = new User(25);
const pete = new User(15);

console.log(User.averageAge());   // должно вернуть 20

pete.age = 19;

console.log(User.averageAge());   // теперь будет 22
→ Ссылка