Оригинальная статья: Laurie — JavaScript Map is getting upsert!
В JavaScript предлагается новый элемент синтаксиса!
Спонсор поста Каталог мобильных приложений AppVisor.ru:
Проект AppVisor.ru основан в 2012 году для того, что бы решить проблему, с которой столкнулись авторы, используя те или иные вычислительные устройства.
Где найти лучшие программы и приложения для ваших мобильных гаджетов, компьютеров?
Что если существует масса полезных приложений, а вы о них не знаете?
Map — это структура данных в JavaScript, о которой вы, возможно, не слышали! Когда вы слышите о map, вы, вероятно, думаете что это что то типа Array.prototype.map.
Но Map это другое. Это объект в JavaScript, который содержит пары ключ-значение.
Подождите секунду … чем это отличается от Object ?!
У них есть некоторые сходства. Фактически, раньше всегда использовался Object для этих целей. Однако есть и различия:
Вы можете создать Map и добавить пары ключ-значение, используя функцию set.
let example = new Map() example.set('test', 'value') // пример Map { 'test' => 'value' }
Однако, если вы установите что-то с тем же ключом, значение будет перезаписано.
example.set('test', true) // пример Map { 'test' => true }
Если вы хотите работать с определенным ключом, то в начале вам нужно убедиться, что он есть, и создать его, только если его нет.
if (!example.has('test')) { example.set('test', 'new value') } example.get('test').myFunctionForMessingWithThisKeyEntry()
И это не единственная подобная ситуация. Возможно, вы захотите вставить ключ, если он отсутствует, только обновить, если он присутствует, и т. д. Было бы неплохо не выполнять проверки существования и использовать set и get в любой момент.
upsert делаем это проще!
upsert функция входит в prototype Map. Ей требуется всего три аргумента:
Первый аргумент — это ключ, который вы хотите использовать.
Второй — это функция, которая будет использовать если ключ уже существует.
Третий — это функция которая будет использоваться, если ключ не существует.
Таким образом, наш предыдущий пример становится таким.
example .upsert('test', undefined, () => 'new value') .myFunctionForMessingWithThisKeyEntry()
В этом случае мы оставляем существующее значение в покое, если оно уже существует, то есть undefined.
В качестве альтернативы, у нас есть этот пример.
example.upsert('test', old => old.someOperation(), undefined)
Здесь old эквивалентен map.get (‘test’). Если ключ не существует, мы ничего не делаем.
Из этих двух примеров становится ясно, что существует множество различных возможностей использования upsert.
Это предложение (proposal) в настоящее время находится на этапе 2 процесса TC39. Если вы заинтересованы в участии в этом разговоре, пожалуйста присоединяйтесь (https://github.com/tc39/proposal-upsert)!
Краткий перевод: https://vuejs.org/guide/components/v-model.html Основное использование v-model используется для реализации двусторонней привязки в компоненте. Начиная с Vue…
Сегодня мы рады объявить о выпуске Vue 3.4 «🏀 Slam Dunk»! Этот выпуск включает в…
Vue.js — это универсальный и адаптируемый фреймворк. Благодаря своей отличительной архитектуре и системе реактивности Vue…
Недавно, у меня истек сертификат и пришлось заказывать новый и затем устанавливать на хостинг с…
Каким бы ни было ваше мнение о JavaScript, но всем известно, что работа с датами…
Все, кто следит за последними событиями в мире адаптивного дизайна, согласятся, что введение контейнерных запросов…
View Comments
Не слышала про Map. Спасибо за полезную информацию. Думаю нужно хорошенько изучать Map, может потом пригодится.
> Не имеет prototype, поэтому не будет никаких ключей, кроме тех что вы создали
Сомнительно. Прототип есть, `__proto__` указывает на `Map.prototype`. Тот же `upsert` именно там и будет находиться.