0
And the guys!
I’m trying to convert this code into php for js, but when I tried to convert the isset function to tipeof an error appears. I searched on the internet and saw that the equivalent function was this, but the error appears in this line. Any suggestions? I thank you already.
PHP class:
class Dijkstra {
//Variaveis
var $visitado = array();
var $distancia = array();
var $No_anterior = array();
var $no_inicio = null;
var $mapa = array();
var $distancia_infinita = 0;
var $numero_de_nos = 0;
var $melhor_caminho = 0;
var $matrixWidth = 0;
function Dijkstra(&$nossoMapa, $distancia_infinita) {
$this->distancia_infinita = $distancia_infinita;
$this->mapa = &$nossoMapa;
$this->numero_de_nos = count($nossoMapa);
$this->melhor_caminho = 0;
}
function EncontrarCaminhoCurto($de, $para) { // função para encontrao caminho mais curto
$this->no_inicio = $de;
for ($i = 0; $i < $this->numero_de_nos; $i++) {
if ($i == $this->no_inicio) {
$this->visitado[$i] = true;
$this->distancia[$i] = 0;
} else {
$this->visitado[$i] = false;
$this->distancia[$i] = isset($this->mapa[$this->no_inicio][$i]) ? $this->mapa[$this->no_inicio][$i] : $this->distancia_infinita;
}
$this->No_anterior[$i] = $this->no_inicio;
}
$maxTentativa = $this->numero_de_nos; // faza verificação da melhor tentativa do caminho mais curto
$tentativa = 0;
while (in_array(false, $this->visitado, true) && $tentativa <= $maxTentativa) {
$this->melhor_caminho = $this->EncontrarMelhorCaminho($this->distancia, array_keys($this->visitado, false, true));
if ($para !== null && $this->melhor_caminho === $para) {
break;
}
$this->atualizar_distancia($this->melhor_caminho);
$this->visitado[$this->melhor_caminho] = true;
$tentativa++;
}
}
}
JS class:
var visitado = [];
var distancia = [];
var No_anterior = [];
var no_inicio = null;
var mapa = [];
var distancia_infinita = 0;
var numero_de_nos = 0;
var melhor_caminho = 0;
var matrixWidth = 0;
function arrayKeys(input) {
var output = new Array();
var counter = 0;
for (i in input) {
output[counter++] = i;
}
return output;
}
class menor_caminho {
Dijkstra(nossoMapa, distancia_infinita) {
this.distancia_infinita = distancia_infinita;
this.mapa = nossoMapa;
this.numero_de_nos = count(nossoMapa);
this.melhor_caminho = 0;
}
EncontrarCaminhoCurto(de, para) { // função para encontrao caminho mais curto
this.no_inicio = de;
for (i = 0; i < this.numero_de_nos; i++) {
if (i == this.no_inicio) {
this.visitado[i] = true;
this.distancia[i] = 0;
} else {
this.visitado[i] = false;
this.distancia[i] = tipeof this.mapa[this.no_inicio][i] //erro esta nessa linha
?
this.mapa[this.no_inicio][i] :
this.distancia_infinita;
}
this.No_anterior[i] = this.no_inicio;
}
maxTentativa = this.numero_de_nos; // faza verificação da melhor tentativa do caminho mais curto
tentativa = 0;
while (in_array(false, this.visitado, true) && tentativa <= maxTentativa) {
this.melhor_caminho = this.EncontrarMelhorCaminho(this.distancia, arrayKeys(this.visitado, false, true));
if (para !== null && this.melhor_caminho === para) {
break;
}
this.atualizar_distancia(this.melhor_caminho);
this.visitado[this.melhor_caminho] = true;
tentativa++;
}
}
}
What error does he accuse? Because you are using a ternary operator, checking whether the condition
this.mapa[this.no_inicio][i]
is true or not– Wees Smith
How do I check if a variable exists in js?
– Moises Moraes
usually I use only a simple if, like
if(this.mapa[this.no_inicio][i] != 'undefined')
– Wees Smith
@Weessmith It wouldn’t be
typeof this.mapa[this.no_inicio][i] != 'undefined'
?– Woss
Yes @Andersoncarloswoss
– Wees Smith