Мало знаний, большой вызов! Эта статья участвует в "Необходимые знания для программистов«Творческая деятельность.
предисловие
Я просматривал часть исходного кода за последние два дня и обнаружил, что время от времени он будет появляться.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"
- только ссылки на один и тот же объект,
Map
struct для обработки его как одного и того же ключа
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
Эпилог
Если эта статья вам помогла, ставьте лайк 👍 и подписывайтесь на ⭐️.
Если в статье есть ошибка, надеюсь исправить ее в комментариях 🙏🙏.