Я как бы забыл про Карту ES6😅😅

JavaScript структура данных

Мало знаний, большой вызов! Эта статья участвует в "Необходимые знания для программистов«Творческая деятельность.

предисловие

Я просматривал часть исходного кода за последние два дня и обнаружил, что время от времени он будет появляться.new Map().Mapструктура данных какES6Новая структура данных в Китае уже используется во многих сценариях. Давайте пересмотрим это сегодня.

Фон карты

существуетJSЕсть общая структура данных - объект (Object), этопара ключ-значениеформат для хранения данных. Например:const obj = { name: 'Tom' }. этоключ(ключ) может бытьнитьтип илиSymbolТипы.

let obj = {};
obj['name'] = 'Tom';
obj[Symbol(1)] = 16;

console.log(obj)  // {name: 'Tom', Symbol(1): 16}

Для решения этой проблемы ES6 предлагает новые структуры данных —Map, который похож на объект, но более гибкий, чем объект. этоключ(ключ) может быть любым типом данных, не ограничиваясь字符串а такжеSymbol.

Основной синтаксис карты

инициализация

инициализацияMapиспользовать один напрямуюДвумерный массив

const newMap = new Map([['name', 'Tom'], ['age', 20], ['root', 'china']]);

MapКонструктор принимаетмножествоВ качестве параметра фактически выполняется следующий алгоритм:

const items = [
  ['name', 'Tom'],
  ['age', 20],
  ['root', 'china']
];

const map = new Map();

items.forEach(
  ([key, value]) => map.set(key, value)
);

инициализировать пустойMap

let newMap = new Map();

Меры предосторожности

  • Если вы назначите несколько назначений одной и той же клавише, более поздние значения перезапишут более ранние.
const map = new Map();

map
.set(1, 'aaa')
.set(1, 'bbb');

map.get(1) // "bbb"
  • только ссылки на один и тот же объект,Mapstruct для обработки его как одного и того же ключа
const map = new Map();

map.set(['a'], 555);
map.get(['a']) // undefined  

['a']а также['a']адреса памяти разные

MapКлюч фактически привязан к адресу памяти, пока адреса памяти разные, он рассматривается как два ключа.

  • Два экземпляра одного и того же значения вMapрассматриваются как два ключа в структуре
const map = new Map();

const k1 = ['a'];
const k2 = ['a'];

map
.set(k1, 111)
.set(k2, 222);

map.get(k1) // 111
map.get(k2) // 222

Сопоставление общих методов и свойств

атрибут размера

sizeСвойство возвращает общее количество членов структуры Map.

const newMap = new Map([['name', 'Tom'], ['age', 20], ['root', 'china']]);
newMap.size;  // 3

Map.prototype.set(key, value)

setспособ установить имя ключаkeyЗначение ключаvalue, затем возвращает весьMapструктура. еслиkeyЕсли значение уже есть, значение ключа будет обновлено, в противном случае ключ будет сгенерирован заново.setметод возвращает текущийMapобъект, поэтому вы можете использоватьЦепное письмо

let newMap = new Map().set(1, 'a').set(2, 'b').set(3, 'c');
// Map(3) {1 => 'a', 2 => 'b', 3 => 'c'}

Map.prototype.get(key)

getметод чтенияkeyсоответствующий ключстоимость, если не найденоkey,вернутьundefined.

let newMap = new Map().set(1, 'a').set(2, 'b').set(3, 'c');
newMap.get(1);  // 'a'
newMap.get(4);  // undefined

Map.prototype.has(key)

является ли ключ в настоящее времяMapобъект, возвращаетBooleanстоимость

let newMap = new Map().set(1, 'a').set(2, 'b').set(3, 'c');
newMap.has(1);  // true
newMap.has(4);  // false

Map.prototype.delete(key)

Удалить ключ, вернутьtrue. Если удаление не удалось, вернитеfalse.

let newMap = new Map().set(1, 'a').set(2, 'b').set(3, 'c');
newMap.delete(1); // true
newMap.has(1);  // false
newMap.delete(1); // false

Map.prototype.clear()

Очищает все члены, без возвращаемого значения.

let newMap = new Map().set(1, 'a').set(2, 'b').set(3, 'c');
newMap.clear();

newMap.size;  // 0

Эпилог

Если эта статья вам помогла, ставьте лайк 👍 и подписывайтесь на ⭐️.

Если в статье есть ошибка, надеюсь исправить ее в комментариях 🙏🙏.