Нужно ли изучать вообще эти темы? Я конечно не разобрал в большом количестве чужой код, но и в форумах не видел вопросы по Set и Map. Они как то в практике пользуются?
Был бы рад примеру, где вы применили их.
P.s. Set как минимум могу представить, что может быть удобен при наборе уникальных данных. А вот Map мне кажется совсем неудобен как объект.
JavaScript
Знатоки, ответьте пожалуйста ответ на общий вопрос про Set & Map
И то и другое в JS кажется введено не так давно, вроде еще в ES5 их не было (именно Map, а не map, это другое), наверное поэтому и мало вопросов на форумах, но Set (множества) важная штука в таком понятии как структуры данных. В Python вообще set одна из основных тем, вот там мощные заходы на эту тему...
Амантай Таурбаев
спасибо вот Map читаю, думаю че за тема. Объект классно справляется вещами, зачем это тут )))
map удобен -экономичен быстр
в мап возможно хранить
переменые почти любого типа
map удобен в хранениии и замене
по ключу -значение будет тоже уникально
при вставки с даннх с таким же ключем - происходит авто замена
в мап возможно хранить
переменые почти любого типа
map удобен в хранениии и замене
по ключу -значение будет тоже уникально
при вставки с даннх с таким же ключем - происходит авто замена
"Map – это коллекция ключ/значение, как и Object. Но основное отличие в том, что Map позволяет использовать ключи любого типа." (из учебника)
Применяются везде и повсеместно.
Несмотря на то, что термин "ключ->значение" можно отнести к объекту, последний все-таки древовидная структура данных.
Никакой речи о замене Map объектом и быть не может.
Map позволяет сопоставить любые типы "ключ->значение":
new Map([[{}, {}]])
Объект ограничен типами ключей(string|symbol), но может предоставить доступ на любой "глубине":
myObj.foo.bar.box = 123
Попробуй установить уникальный ключ для объекта:
const foo = { [Symbol()]: 123 }
... и получить список ключей(если не брать во внимание getOwnPropertySymbols)
Object.keys(foo) // => [/* пусто */]
Или установи
const foo = { 123: 'xxx' }
Интересно, какой из ключей был установлен: число 123 или строка "123"? - теперь мы об этом не узнаем.
Я уж не говорю об удалении ключей, да еще когда надо вернуть результат.
В Map это встроено(так как он изначально реализован как динамически изменяемая коллекция):
map.delete(key) // => boolean
Даже не представляю как это может выглядеть на объекте(одним словом "извращение"):
deleteProp(key){
if (Object.hasOwn(obj, key)) {
try {
delete obj[key]
} catch (/* БЕДА: Кто-то установил ненастраиваемое свойство */) {
return ???
}
return true
}
return false
}
Публичный API обычно использует именно литералы массивов или объектов, поэтому ты часто и не встречаешь Set/Map в коде.
Если функция принимает список уникальных id, правильнее ее использовать так:
some(new Set([1, 2, 3]))
Но литерал массива проще, короче и нагляднее:
some([1, 2, 3])
В реализации функции, такой массив будет отфильтрован, либо преобразован к Set.
Несмотря на то, что термин "ключ->значение" можно отнести к объекту, последний все-таки древовидная структура данных.
Никакой речи о замене Map объектом и быть не может.
Map позволяет сопоставить любые типы "ключ->значение":
new Map([[{}, {}]])
Объект ограничен типами ключей(string|symbol), но может предоставить доступ на любой "глубине":
myObj.foo.bar.box = 123
Попробуй установить уникальный ключ для объекта:
const foo = { [Symbol()]: 123 }
... и получить список ключей(если не брать во внимание getOwnPropertySymbols)
Object.keys(foo) // => [/* пусто */]
Или установи
const foo = { 123: 'xxx' }
Интересно, какой из ключей был установлен: число 123 или строка "123"? - теперь мы об этом не узнаем.
Я уж не говорю об удалении ключей, да еще когда надо вернуть результат.
В Map это встроено(так как он изначально реализован как динамически изменяемая коллекция):
map.delete(key) // => boolean
Даже не представляю как это может выглядеть на объекте(одним словом "извращение"):
deleteProp(key){
if (Object.hasOwn(obj, key)) {
try {
delete obj[key]
} catch (/* БЕДА: Кто-то установил ненастраиваемое свойство */) {
return ???
}
return true
}
return false
}
Публичный API обычно использует именно литералы массивов или объектов, поэтому ты часто и не встречаешь Set/Map в коде.
Если функция принимает список уникальных id, правильнее ее использовать так:
some(new Set([1, 2, 3]))
Но литерал массива проще, короче и нагляднее:
some([1, 2, 3])
В реализации функции, такой массив будет отфильтрован, либо преобразован к Set.
Похожие вопросы
- Логические операторы && и || JavaScript
- Здравствуйте. Уважаемые программисты, подскажите, как отобразить Map и Filter в нотивном виде, JavaScript?
- Чем отличается filter от map? Не вижу разницы
- Проверьте 2 кода ((( пожалуйста и ткните носом на ошибку. В общем 1 код работает частично, а второй вообще не работает. JS
- Знатоки JavaScript'a, вам сюда
- Как принять ответ от сервера node.js
- Вопрос по JS. Пожалуйста скажите почему код дает 6 пять раз. Почему не 1,2,3,4,5 .Очень запуталась от setTimeout.
- Борьба со спамом и флудом на Ответах.
- Пожалуйста объясните человеческим языком где и как используется значение undefined и null в JavaScript ?
- Ребят помогите с кодом пожалуйста (JS, Googl Apps Sсript)