@nastinapetrova555

Как привести элементы коллекции Map к нижнему регистру?

есть Map коллекция, например {'test1' => true, 'test2' => true}, но в нее могут прийти ключи с другим регистром, поэтому после формирования коллекции мне нужно привести все к одному регистру. Возможно ли это вообще без создания промежуточного map, в который сетятся отформатированные значения? Через перебор for...of/forEach Map не переназначает значения, очевидно. Через метод .set() внутри перебора в map дублируются одинаковые значения с разным регистром

Нужно форматировать не при создании, а именно после, то есть необходимо отформатировать уже готовый Map, тк формирование разных коллекций происходит в разных источниках, но все они приходят потом в одно место, где и обрабатываются
  • Вопрос задан
  • 102 просмотра
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
  1. Собрать в массив имена ключей, которые будем «переименовывать».
  2. Пройти по этому массиву:
    • брать значение из Map
    • создавать новый toLowerCase() ключ с этим значением
    • удалять исходный ключ
решение
const MyMap = new Map([['aAa', 'A'], ['bbb', 'B'], ['CcC', 'C']]);
const toRename = [...MyMap.keys()].filter(key => key.toLowerCase() !== key);
// [ "aAa", "CcC" ]

toRename.forEach(key => {
  MyMap.set(key.toLowerCase(), MyMap.get(key));
  MyMap.delete(key);
});
// MyMap: { bbb → "B", aaa → "A", ccc → "C" }
По-хорошему, надо проверять ещё, что ключ именно строка. А то Map дело такое, там и объект ключом может.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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