Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Получить массив имен и айдишников через классы (https://javascript.ru/forum/misc/84202-poluchit-massiv-imen-i-ajjdishnikov-cherez-klassy.html)

NovichokJS 05.07.2022 15:02

Получить массив имен и айдишников через классы
 
class User {
  constructor(id, name, sessionId) {
    this.id = id;
    this.name = name;
    this.sessionId = sessionId;
  }
}

class UserRepository {

  constructor(users) {
    this.users = users;
    Object.freeze(users);
  }


  getUserNames() {
    return this.users.map(this.name);
  }

  getUserIds() {
    return this.users.map(this.id);
  }

  getUserNameById() {
    return this.users.map(this.sessionId);
  }
}

// examples
const user = new User('1', 'Jack', 'session-id');


Мне нужно в методы getUserNames, getUserIds и getUserNameById сохранять(получать) массив соответственно имен, айди и имен по айдишнику. Поле users тут - это как бы array[User] - массив объектов пользователей.
Помогите доделать код пожалуйста.

рони 05.07.2022 15:25

NovichokJS,
class User {
  constructor(id, name, sessionId) {
    this.id = id;
    this.name = name;
    this.sessionId = sessionId;
  }
}

class UserRepository {
  users = [];
  constructor(users) {
    this.users.push(...users);
  }


  getUserNames() {
    return this.users.map(({name}) => name);
  }

  getUserIds() {
    return this.users.map(({id}) => id);
  }

  getUserNameById() {
    return this.users.map(({sessionId}) => sessionId);
  }
}

// examples
const user = new User('1', 'Jack', 'session-id');
const user2 = new User('2', 'Jack2', 'session-id2');


const repository = new UserRepository([user, user2]);
console.log(repository.getUserNames())

NovichokJS 05.07.2022 15:35

Спасибо, я там ставил Object.freeze(users) - мне просто нужно запретить мутацию массива users. Как это указать корректно в коде?

рони 05.07.2022 15:51

NovichokJS,
constructor(users) {
    this.users.push(...users);
    Object.freeze(this.users)
  }

NovichokJS 05.07.2022 16:37

Спасибо!

NovichokJS 05.07.2022 17:03

Рони, а как сделать чтобы этот метод getUserNameById() возвращал имя пользователя по его id?

NovichokJS 05.07.2022 17:04

понимаю точно что не через map, который нам возвращает массив

рони 05.07.2022 17:35

NovichokJS,
getUserNameById(i) {
    return this.users.find(({id}) => i === id)?.name;
  }

NovichokJS 05.07.2022 18:01

круто, спасибо


Часовой пояс GMT +3, время: 18:35.