How to translate the isset function of php to an equivalent in javascript

Asked

Viewed 125 times

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++;
        }
    }
}

  • 1

    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

  • How do I check if a variable exists in js?

  • 1

    usually I use only a simple if, like if(this.mapa[this.no_inicio][i] != 'undefined')

  • 3

    @Weessmith It wouldn’t be typeof this.mapa[this.no_inicio][i] != 'undefined'?

  • Yes @Andersoncarloswoss

2 answers

3


Use this:

if (typeof this.mapa[this.no_inicio][i] !== 'undefined') {
  // Código aqui
}

2

I think it would be right to use Typeof instead of tipeof.

this.distancia[i] = typeof this.mapa[this.no_inicio][i] 

Browser other questions tagged

You are not signed in. Login or sign up in order to post.