Что ж, я думаю, чтение заголовка сообщения заставляет вас реагировать так же, как и сообщение с изображением. В частности, любители JS, кто может подумать, почему у меня возникают проблемы с пониманием одного из ядер Javascript? Поскольку почти все является объектом в javascript.
typeof new String('I am creating String, But they call me object');
typeof ['What? I am not an array'];
typeof {'Who me?': 'Well, I have no issues'}; typeof null; // I am nothing but I have existence
Есть некоторые знания, которые вы узнали из своего опыта, узнав от кого-то или испытав это сами. В этом посте я делюсь своим опытом. Итак, этот пост посвящен проблемам, возникающим с литералами объектов и т. д., и тому, как мы можем выбрать альтернативы для достижения той же цели, но с совершенством.
Что касается альтернатив, то в некоторых случаях существуют надежные типы конструкций.
Вариант использования 1:
Что ж, однажды я пытался просмотреть список в представлении с помощью литерала объекта. Причем, хотел показать на виду так же, как я заявил ниже.
const obj = { 4: 'A' 2: 'B', 1: 'C', 3: 'D', }
Когда я пытаюсь напечатать Object.values(obj), это дает мне
C, B, D, A
вместо
A, B, C, D
Почему?
Поскольку, кроме строковых ключей, все свойства, являющиеся целочисленными ключами, появляются первыми в порядке свойств объекта и сортируются числово.
Что ж, чтобы напечатать объект по порядку, я пробовал несколько исправлений.
Исправление № 1. Объедините постоянный префикс, такой как альфа-символ, специальный символ ($, %, &) и фактически «0» в кавычках для каждого ключа объекта во время объявления объекта. Это гарантирует порядок, но нам нужно использовать дополнительный символ только для сохранения порядка. Видишь, как ненадежно?
{ 1: 'A', 4: 'B' } -> { $1: 'A', $4: 'B' }
Исправление № 2. Создайте массив объектов и используйте ключ-значение, что гарантирует порядок при обходе, но чтобы найти конкретное значение по этому ключу, нам нужно снова пройти весь массив. Не очень хорошая идея, верно?
[ { key:4, value: 'A' }, { key:2, value: 'B' }, { key:1, value: 'C' }, { key:3, value: 'D' }, ]
Эффективное исправление №3:использование new Map(), которое гарантирует порядок независимо от типа данных ключей — числового, буквенного или любого символа. Он поддерживает порядок объектов, и мы легко получаем требуемое значение по этому требуемому ключу, нет необходимости проходить весь объект.
let objectWithGuaranteeOrder =
new Map([ [4, 'A'], [3, 'B'], [2, 'C'], [1, 'D']]);for (let [key, value] of objectWithGuaranteeOrder) { console.log(key, value); }
O/P: // 4 A, 3 B, 2 C, 1 D
Разберитесь с порядком объектов, а что, если нам нужно хранить только значения или ключи в JS, что ж, массив делает это, но не может хранить уникальные. Для этого мы все знаем силу литералов объектов в javascript, когда дело доходит до отображения.
Для сопоставления мы можем сохранить уникальный ключ-значение в виде литералов объекта или новой карты, но что, если нужно хранить только одно — ключ или значение.
Мы можем добиться того же с помощью Object или new Map(), используя истинные значения.
{ A: true B: true, } --OR-- new Map([ [A, true], [B, true],);
Поскольку литерал объекта или new Map() требует пары ключ-значение, мы должны назначить дополнительное истинное значение, чтобы заполнить этот синтаксис, так же, как мы сделали в приведенном выше случае.
Эффективное решение №1
new Set('A', 'B');
Вот и все, нет необходимости сохранять дополнительное истинное значение, как мы это делали в литерале объекта или в новой Map(), чтобы сохранить пару ключ-значение для сохранения уникальных ключей. . И да, вы можете видеть вставку, удаление и обнаружение значения в O (1).
В мою защиту
Я начал свою карьеру в javascript и до сих пор ❤️ работаю над ним. Javascript обновляется и распространяется повсюду. Кто знал? за исключением Брендана Эйка (создателя JS), то, что он создал для Брауэра, займет место на серверах, настольное программное обеспечение.