Несколько дней назад мой коллега поделился этим постом о картах JavaScript и преимуществах их использования. Карта - это новая функция JavaScript. Доступен только с ES6. Так что неудивительно, что это не такая популярная функция, как должно быть. Опять же, использование обычного объекта может показаться более удобным в использовании, чем карта. Это причина для этого сообщения. Я не объясняю, почему вам следует использовать карты. Но это шпаргалка о том, как их использовать.

Основы

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

Создание карты

Карта - это объект; следовательно, вам нужно использовать новое ключевое слово для его создания.

const map = new Map();

Использование карты

Создав его, вы можете использовать список различных функций, которые он предоставляет.

// insert into map
map.set("key", "value");
// get value from map
map.get("key"); //value
// get value for non-existing key
map.get("non-existing-key"); // undefined
// remove item from map
map.delete("key"); // true

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

Другие полезные функции

Есть целый набор полезных функций, которые делают работу с картами проще, чем с объектами.

Содержащий элемент

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

// insert into map
map.set("key", "value");
// check if key exists
map.has("key"); // true
map.has("non-existing-key"); // false

Удаление всех значений

Использование функции удаления удаляет из него один элемент. Но вы не можете запускать его для каждой клавиши, если хотите очистить карту. Поэтому есть четкая функция.

map.clear();

Количество элементов на карте

С обычными объектами JavaScript проверять, пуст ли он, беспорядочно. Сначала вы используете функцию ключей объекта Object, чтобы получить их список. Затем вам нужно проверить количество этих ключей. У карт это одно свойство - размер.

// size of objects
const obj = {}
const sizeOfObj = Object.keys(obj).length; // 0
// size of maps
const map = new Map();
const sizeOfMap = map.size; // 0

Другие функции объекта

Как показано в предыдущем примере, вы можете использовать функции Object для объектов JavaScript. Карта поддерживает их изначально.

// old way
const obj = { test: 123 }
Object.keys(obj); // ["test"]
Object.values(obj); // [123]
Object.entries(obj); // [["test", 123]]
// new Map object
const map = new Map();
map.set("test", 123);
map.keys(); // MapIterator {"test"}
map.values(); // MapIterator {123}
map.entries(); // MapIterator {"test" => 123}

Вы могли заметить, что для карты все результаты являются экземплярами MapIterator. К сожалению, это означает, что вы не можете использовать для них функции массива (map, filter, forEach, reduce). Вы можете использовать цикл for..of. Но хорошая новость в том, что есть простой способ получить его в виде массива.

// Just use Array.from function
Array.from(map.keys()); ["test"]

Создание карты из JSON

Если вы используете JavaScript, велика вероятность, что вы взаимодействуете с каким-то сервером. В этом случае сервер, вероятно, вернет вам JSON. Итак, вопрос в том, как преобразовать его в карту? Если у вас есть один уровень глубины, следующий пример - самый простой способ. Если уровень глубины больше единицы, вам нужно сначала преобразовать каждое значение в карту.

const obj = {
    firstName: "john",
    lastName: "doe"
};
const asMap = new Map(Object.entries(obj)); // Map(2) {"firstName" => "john", "lastName" => "doe"}

Как упоминалось выше, эта одна линия работает только для уровня глубины объекта, равного единице. Если какое-либо значение в нем является объектом, вам необходимо преобразовать его индивидуально. Но для этого вы также можете использовать этот пакет NPM конвертера в карту.

Чтобы узнать больше, вы можете подписаться на меня в Twitter, LinkedIn, GitHub или Instagram.