Может кто-нибудь сказать мне, почему размер карты равен нулю? - PullRequest
0 голосов
/ 02 июля 2019

Я изучаю структуры данных в JS и написал некоторый код для построения структуры данных Graph.

Но, похоже, есть проблема, которую я не мог понять, почему это происходит.

Пожалуйста, посмотрите комментарии к методу getGraph (). Я просто печатаю размер списка и сам список здесь. list.size возвращает 0, даже если в списке есть данные.

Я создал отдельную карту, добавил данные и распечатал ее. Оно работает. Но в приведенном ниже случае.

class Graph {
    constructor() {
        this.list = new Map();
    }

    addVertex(vertex) {
        if (!this.list[vertex]) {
            this.list[vertex] = [];
            console.log("Added", this.list);
        } else {
            console.log("Vertex already exists!");
        }
    }

    addEdge(vertex, node) {
        if (this.list[vertex]) {
            if (!(this.list[vertex].indexOf(node) > -1)) {
                this.list[vertex].push(node); 
            } else {
                console.log('Node : ' + node + " already added!"); //?
            }

        } else {
            console.log("Vertex " + vertex + " does not exist!")
        }
    }

    getGraph() {
        console.log(this.list);
        console.log(this.list.size); // List size comes as zero even if I added some nodes and vertices
    }

}

var graph = new Graph();
graph.addVertex("1");
graph.addVertex("2");
graph.addVertex("3");
graph.addVertex("1");
graph.addVertex("5");
graph.addVertex("5");

graph.addEdge("1", "3");
graph.addEdge("2", "3");
graph.addEdge("2", "3");
graph.addEdge("12", "3");

graph.getGraph();

1 Ответ

4 голосов
/ 02 июля 2019
if (!this.list[vertex]) {
  this.list[vertex] = [];

Это неправильный способ взаимодействия с содержимым карты. Это законный javacript, но вы добавляете произвольные пары ключ / значение к объекту карты, а не сохраняете вещи на карте.

Вместо этого сделайте это:

if (!this.list.has(vertex) {
  this.list.set(vertex, []);
}

Точно так же, когда вы хотите получить данные с карты, не используйте синтаксис скобок, используйте this.list.get(vertex)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...