Является ли хорошей практикой использовать объекты в качестве ключей на картах JS? - PullRequest
1 голос
/ 25 мая 2020

TL; DR: У меня есть настраиваемые объекты с уникальными идентификаторами, и я хочу создать Map() с этими объектами в качестве ключей. Должны ли ключи карты быть этими объектами или лучше использовать идентификатор объекта в качестве ключа?

Полный вопрос:

Например, у меня есть объект Room, который содержит Map()<personID, Person>, где personID - это целое число, а Person - это настраиваемый объект.

class Room { 
    constructor()
    {
        // Map personID to Person
        // @type {Map<Integer, Person>}
        this._persons = new Map();
    }
}

Каждый человек может иметь собственный псевдоним для других пользователей в комнате, и это достигается за счет наличия Map<personkey, nickname> в каждом объекте Person. Итак, вопрос в том, должно ли personkey быть personID или Person объектом?

class Person{ 
    constructor()
    {
        // Map person to his nickname
        // should personkey be Person or Integer(personID)?
        // @type {Map<personkey, String>}
        this._personsNicknames = new Map();
    }

    addPersonNickname(person)
    {
        // add to map
    }
}

Кажется, что использование объекта Person в качестве ключа является лучшим решением, поскольку я не предоставлять идентификаторы объекту Person, и только Room отвечает за сопоставление идентификаторов с Person. Но я не уверен, что использование объекта Person в качестве ключа для Map() - хорошая идея, похоже, что могут возникнуть проблемы с поиском значения на карте по ключу объекта и использованием простого целочисленного идентификатора в качестве ключ не вызовет никаких проблем.

А также, используя ID в качестве ключа, я могу заменить Map() на простой объект JS, хотя я не уверен, принесет ли это какие-либо преимущества

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...