es6-Map Set подождите, пока листья не пожелтеют

внешний интерфейс JavaScript

Пока листья не пожелтеют

Началась военная подготовка первокурсников. Мы с соседкой по комнате пришли на площадку рано, а одноклассники приходили один за другим. Я все искала ее тень в толпе, и долго не могла увидеть, как она разговаривает и смеется со своей соседкой по комнате и Она идет к нам... Да ладно, ее светлая кожа, слезящиеся глаза и камуфляж военной подготовки не могут скрыть ее красоту, особенно когда она улыбается...
Соотношение парней и девушек в нашем классе 3 к 1. Она стоит во втором ряду и третья снизу. Я стою в середине третьего ряда. Я вижу ее с одной стороны лица. Эта позиция довольно хороша.Он взглянул на нее, и каждый раз, когда он смотрел на нее, его сердце бешено билось. В тот день, когда я собирался взглянуть на нее, она случайно перевела взгляд на меня. Это был первый раз, когда мы посмотрели друг на друга. Я не знаю, как описать это чувство. Это было потрясающе, но я не мог говорить... Чтобы описать, я инстинктивно быстро опустил голову, она должна была заметить, что я смотрю на нее... Я добавил ее QQ той ночью. Я не мог дождаться. Хотя я знал, что недостоин ее, каждый имел право любить. В то время я был глубоко пойман в ловушку...
Я всегда отвечаю на сообщения за считанные секунды, ее ответы каждый раз очень короткие, часто ждут полдня, чтобы ответить или вообще не отвечают. Что она делает, почему не отвечает мне, встревоженная и расстроенная. Братья, приходилось ли вам когда-нибудь так ждать? Пока она мне не ответит, хотя бы на пару слов, мое настроение облегчится, но я все равно буду спрашивать ее, что ты делаешь, почему так долго не отвечала мне. Военная подготовка шла день за днём, и ей делалось всё больше и больше признаний. Каждый раз, когда я слышал, что кто-то ей признавался, я до смерти нервничал. Я испытал облегчение, когда услышал, что она не согласна. дней длилось до конца сентября.Каждый день был для меня мучением,я наконец не выдержал,решил признаться ей...

Не подписывайтесь на меня, чтобы общаться так:
Ты проснулся? Завтракали?
Завтракать так поздно вредно для желудка, поэтому ешьте его раньше.
Что ты ел на обед? Что ты сейчас делаешь?
Почему ты не ложишься спать в 11 часов? Поздно ложиться спать вредно для здоровья.
Тогда ты отдыхаешь рано, спокойной ночи.

Установите WeakSet Map Использование WeakMap и рукописный набор, карта. После прочтения

Установить использование

На данный момент полученный набор не является数组, пригодный для использованияset=[...set]а такжеset=Array.from([set])превратить его в массив
image.pngдобавить: добавить. очистить: очистить все. удалить: удалить определенный. has: определить, существует ли он. размер: длина
Примечание: и ключи, и значения равны [1,'1']. forEach: метод обхода

image.png

В чем разница между Set WeakSet?

Давайте посмотрим, что находится в слабой ссылке WeakSet.

image.png

У него есть только метод add delete has, который совпадает с set.
На следующем рисунке показана разница между слабой ссылкой WeakSet и набором, аналогично поверхностному и глубокому копированию.

image.png

Почему у него нет атрибута размера?

В JavaScript есть механизм автоматической сборки мусора, так каков же принцип этого механизма автоматической сборки мусора? На самом деле это очень просто, то есть найти те значения, которые уже не используются, а затем освободить занимаемую ими память. Сборщик мусора будет выполнять операцию освобождения каждый фиксированный период времени.
key1=nullПосле этого set1 тоже будет собираться как слабая ссылка, но конкретное время сбора неизвестно, поэтому у него нет размера

Карта и WeakMap
Обычные имена ключей объектов могут быть только строками.

image.png

image.pngВнутренняя часть obj будет передавать объект b черезObject.prototype.toString.call(b)для преобразования

Метод карты и его отличие от обычных объектов

Ключ Карты может быть любого типа, но объект может быть только строкой.

image.pngНа следующем рисунке показан метод и переработка Map. get: получить значение set: установить значениеimage.png

image.png

WeakMap Weak References: Способ, при котором текущие утечки памяти не представляют опасности. Сделайте код более элегантным

Давайте сначала рассмотрим метод WeakMap, но я расскажу больше и буду использовать его, а также сосредоточусь непосредственно на ключевых моментах.

image.png

Чтобы предотвратить утечку памяти, связанные события будут удалены.Если преследование лучше, весь дом и связанные с ним свойства будут убиты.

image.png

Используйте слабое значение
Таким образом, вам не нужно очищать счетчик.Когда слишком много атрибутов, связанных с btn, вам не нужно вручную очищать все связанные атрибуты.image.png

Реализуйте простой набор

image.png

image.png

На самом деле это проблема. Ключ объекта представляет собой строку, поэтому на приведенном выше рисунке невозможно различить 1 и «1».

На следующем рисунке я использую Map для преобразования обновленной версии Set

//Здесь 2 деталиNaN===NaNложно, поэтому используйте es6Object.isОбработка, есть еще обработка +0 и -0, можете сами изучить, хаха

class Set1{
		constructor(arr=[]){
			this.size=0
			this.obj=new Map()
			if(arr.length){
				arr.forEach(item=>this.add(item))
			}
		}

		add(val){
			if(this.has(val)) return false
			this.obj.set(val,val)
			this.size++
			return true
		}

		has(val){
			//这里有2个细节   NaN===NaN 是false的   所以要用es6 的Object.is处理,这里还有+0 和-0的处理,你们自己可以研究下,哈哈
			let flag=false
			for (let [key,item] of this.obj.entries()) {
			 	if(isNaN(val)){
			 		if(Object.is(val,item)){
                                            flag=true
			 		}
			 	}else{
			 	        if(val===item){
                                             flag=true
                                        }
                                 }
                       }
                       return flag
		}

		delete (val){
			if(this.has(val)){
				 this.obj.delete(val)
				this.size--
				return true
			}
			return false
		}

		clear (val){
			this.size=0
			this.obj={}
		}

		keys (){
			return this.obj.values()
		}

		values (){
			return this.obj.values()
		}

		forEach (fn,that=this){
			 for (let [key,item] of this.obj.entries()) {
                            fn.call(that, item, item, this.this.obj);
                        }
		}
	}
Реализуйте простую карту
class Map1{
		constructor(){
			this.size=0
			this.obj={}
		}

		set(key, val){
			this.obj[key]=val
			this.size++;
		}

		get(key){
			return this.obj[key]
		}

		has(key){
 			return this.obj.hasOwnProperty(key);
		}

		delete (key){
 			if (this.has(key)) {
                            delete this.obj[key];
                            this.size--;
                            return true;
                        }
        		return false;
		}

		clear (){
			this.size=0
			this.obj={}
		}

		forEach (fn,that=this){
 			for (let i = 0; i < this.size; i++) {
                            let key = Object.keys(this.obj)[i];
                            let value = this.obj[key];
                            fn.call(that, value, key, this.obj);
                        }
		}

		values (){
			return Object.values(this.obj);
		}

		keys (){
		    return Object.keys(this.obj);
		}
	}

Карту я не менял, ведь структура Сета и Карты особенная, и идея реализации должна быть схожей.

Суммировать

WeakSet WeakMap — все слабые ссылки
Слабые ссылки: способ, которым текущие утечки памяти не представляют опасности Код является лишь упрощенной версией, и есть много мест, которые необходимо оптимизировать.Например, параметр Map может быть двумерным массивом.Я не могу смоделировать его реальную структуру Map. Вы выслушали мою историю и изучили технику, пожалуйста, поддержите меня и поддержите. Спасибо