Ошибка в Map () в ES6 - PullRequest
0 голосов
/ 09 июня 2018

Я пытаюсь реализовать алгоритм DFS в React, Redux для его визуализации.Для создания списка смежности я использую структуру данных Map() в JavaScript:

dfs(v, visited, adjList) {
  console.log(v);
  visited[v] = true;

  var get_neighbours = adjList.get(v);

  for (var i in get_neighbours) {
    var get_elem = get_neighbours[i];
    if (!visited[get_elem])
      this.dfs(get_elem, visited, adjList);
  }
}

dfsStart(e) {
  var n = 0;
  var adjList = new Map();
  for (var i = 0; i < this.props.edges.length; i++) {
    n = Math.max(this.props.edges[i].u, this.props.edges[i].v);
  }
  for (var i = 1; i <= n; i++) {
    adjList.set(i, []);
  }
  for (var key of adjList.keys()) {
    console.log(key);
  }
  //console.log(adjList.size);
  for (var i = 0; i < this.props.edges.length; i++) {
    var x = this.props.edges[i].u;
    var y = this.props.edges[i].v;
    console.log(x + " " + y);
    [...adjList.get(x), y] - > where I am getting error
  }
  for (var key of adjList.values()) {
    console.log(key);
  }
  var visited = [];
  for (i = 1; i <= n; i++) {
    visited[i] = false;
  }
  this.dfs(1, visited, adjList);
}

Я даже пытался вставить значения в пустой список с помощью метода push() следующим образом

adjList.get(x).push(y)

Но это также дает мне ошибку!

Uncaught TypeError: Невозможно преобразовать undefined или null в объект в Function.from ()

И когда я использую push():

Layout.js: 72 Uncaught TypeError: Невозможно прочитать свойство push из неопределенного в Layout.dfsStart (Layout.js: 72)

Ответы [ 2 ]

0 голосов
/ 09 июня 2018
dfs(v, visited, adjList) {
console.log(v);
visited[v] = true;

var get_neighbours = adjList.get(v);

console.log(get_neighbours);

for (var i in get_neighbours) {
    var get_elem = get_neighbours[i];
    //console.log(get_elem);
    if (!visited[get_elem]) {
        this.dfs(get_elem, visited, adjList);
    }
 }
}



dfsStart(e) {
var n = 0;
var adjList = new Map();
for(var i=0;i<this.props.edges.length;i++) {
  n = Math.max(n, Math.max(this.props.edges[i].u, this.props.edges[i].v));
  adjList.set(this.props.edges[i].u, []);
}
for(var i=0;i<this.props.edges.length;i++) {
  adjList.get(this.props.edges[i].u).push(this.props.edges[i].v);
}
var visited = [];
for(i=1;i<=n;i++) {
  visited[i] = false;
}
this.dfs(1, visited, adjList);
}

Это решает проблему, но все равно дает неопределенную ошибку в функции dfs (), когда я console.log (get_neighbours),

0 голосов
/ 09 июня 2018

Полагаю, вы хотите взять максимальное значение x в n вместо последнего x или y, измените:

for(var i=0;i<this.props.edges.length;i++)
  n = Math.max(this.props.edges[i].u, this.props.edges[i].v);

На:

n = Math.max(...this.props.edges.map(edge => edge.u));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...