Что ж, я думаю, чтение заголовка сообщения заставляет вас реагировать так же, как и сообщение с изображением. В частности, любители 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), то, что он создал для Брауэра, займет место на серверах, настольное программное обеспечение.