archi_kud
@archi_kud
Frontend Developer

Почему объект пропадает до его удаления?

Здравствуйте, вот код :

class Queue {
	constructor() {
		this.queue = [];
	}

	enqueue(data) {
		this.queue.unshift(data);
	}

	dequeue() {
		return this.queue.pop()
	}

	isEmpty() {
		return this.queue.length === 0
	}

	peek() {
		return this.queue[this.queue.length - 1]
	}
}

class PriorityQueue extends Queue {
	constructor() {
		super();
	}

	enqueue(data, p) {
		this.queue.unshift({data: data, p: p});
	}

	dequeue(index = null) {
		if (index) {
			const item = this.queue[index];
			this.queue.splice(index, 1);

			return item
		}

		return this.queue.pop()
	}

	extractMax() {
		const priorityArr = this.queue.map(obj => obj.p);
		const maxItems = this.queue.filter(obj => obj.p === Math.max(...priorityArr));

		return maxItems.length === 1 ? maxItems[0] : maxItems 
	}
	
	getMax() {
		return Math.max(...this.queue.map(obj => obj.p))
	}
}

const priorityQueue = new PriorityQueue();

priorityQueue.enqueue('Первый элемент', 5);

console.log(priorityQueue.queue);

console.log(priorityQueue.dequeue(0));


В первом console log`e объект остается в списке, но его нельзя просмотреть и длина массива равна 0. Я не совсем понимаю почему объект исчезает до вызова функции удаления?
  • Вопрос задан
  • 86 просмотров
Пригласить эксперта
Ответы на вопрос 2
xEpozZ
@xEpozZ
Веб-разработчик
Потому что console.log выводит ссылку на данные
https://www.freecodecamp.org/news/mutating-objects...
Ответ написан
Комментировать
profesor08
@profesor08 Куратор тега JavaScript
Объекты передаются по ссылкам. Это надо уяснить. Ты выводишь в консоль свой массив(тоже объект) объектов, потом удаляешь один, в результате массив пуст. Когда ты смотришь содержимое, то там уже ничего нет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы