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, хотя я не уверен, принесет ли это какие-либо преимущества