dom1n1k
@dom1n1k

Как проще всего получить элемент из коллекции Set/Map?

Как из объекта типа Set или Map получить первый элемент? А вообще говоря не обязательно первый, можно произвольный - последний, из середины, хоть какой-нибудь.

Предвосхищая флуд на тему, что Set не для того придуман и тп - сразу объясню цель.
Некая функция получает на вход коллекцию объектов. Нюанс в том, что объекты не всегда имеют постоянную структуру. Поэтому функция прежде всего хочет получить из множества один семпл и проверить там наличие некоторых полей. В зависимости от результатов, далее могут быть использованы разные алгоритмы.

Вообще говоря, вопрос смотрится туповато, потому что спецификация предоставляет для этого инструменты:
https://developer.mozilla.org/ru/docs/Web/JavaScri...
Но у нас есть чудо под названием IE11, которое поддерживает Set/Map, но в очень урезанном виде - только добавить, удалить и обход через forEach.

Получился такой вот костыль:
// modern browsers
if (points.values) {
	return points.values().next();
}
// IE11
else {
	let el;
	points.forEach(function (p, i) {
		if (i == 0) el = p;
	});
	return el;
}

Но может есть решение красивее?
  • Вопрос задан
  • 321 просмотр
Пригласить эксперта
Ответы на вопрос 1
kurtov
@kurtov
Мы используем такой вариант: если в браузере нет поддержки какой то фичи, то подключается полифил. Детектим фичи, а не браузер. Как результат код на месте чист и без условий, соответственно в современных браузерах всё быстро и оптимально. Полифилы это не производительно, но это выбор юзера - пусть один и страдает.

Конкретно по вашему вопросу. Я бы добавил дополнительно "тип" по которому определять тип коллекции. Например вторым параметром, если это сложно (например для промисов) то передавать объект {type: 'type', collection: 'Set'}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы