Why do I get undefined in an array?

2

When I want to show the two plants that I have created on the floor I get the following:

  

We are in the plant: undefined door undefined and the owner is undefined

Here I have my code:

plantas = Array();
function edificio(calle, numero, cp)
{
  // Propiedades
  this.calle = calle;
  this.numero = numero;
  this.cp = cp;

  // Metodos
  this.modificarNumero = modificarNumero;
  this.modificarCalle = modificarCalle;
  this.modificarCodigoPostal = modificarCodigoPostal;
  this.imprimeCalle = imprimeCalle;
  this.imprimeNumero = imprimeNumero;
  this.imprimeCodigoPostal = imprimeCodigoPostal;
  this.agregarPropietario = agregarPropietario;
  this.imprimePlantas = imprimePlantas;
}

this.agregarPlantasYPuerta = function (plantas, puertas)
{

}

this.modificarNumero = function (numero)
{
  this.numero = numero;
}

this.modificarCalle = function (calle)
{
  this.calle = calle;
}

this.modificarCodigoPostal = function (cp)
{
  this.cp = cp;
}

this.imprimeCalle  = function ()
{
  document.write("<br>Este edificio esta en la calle " + this.calle);
}

this.imprimeNumero  = function ()
{
  document.write("<br>Este edificio es el nº " + this.numero);
}

this.imprimeCodigoPostal  = function ()
{
  document.write("<br>Este edificio esta dentro del codigo postal: " + this.cp);
}

this.agregarPropietario = function (planta, puerta, propietario)
{
  plantas.push(
    [
      {"planta":planta,"puerta":puerta,"propietario":propietario}
    ])
}

this.imprimePlantas  = function ()
{
  for(var i=0; i<plantas.length; i++)
  {
    document.write("<br>Estamos en la planta: " + plantas[i].planta + " puerta " +plantas[i].puerta + " y el propietario es " + plantas[i].propietario);
  }
}


var CasaJavi = new edificio("Calle navarra",29,50650);
var CasaAna = new edificio("Calle aaaaaa",2329,'5065dds0');

document.write("Vivo en la " + CasaJavi.calle + " nº " + CasaJavi.numero + " y el codigo postal es " + CasaJavi.cp);
CasaJavi.modificarNumero('50');
document.write("<br>Vivo en la " + CasaJavi.calle + " nº " + CasaJavi.numero + " y el codigo postal es " + CasaJavi.cp);
CasaJavi.modificarCalle('Falsa');
document.write("<br>Vivo en la " + CasaJavi.calle + " nº " + CasaJavi.numero + " y el codigo postal es " + CasaJavi.cp);
CasaJavi.modificarCodigoPostal('50730');
document.write("<br>Vivo en la " + CasaJavi.calle + " nº " + CasaJavi.numero + " y el codigo postal es " + CasaJavi.cp);

CasaAna.imprimeCalle();
CasaAna.imprimeNumero();
CasaAna.imprimeCodigoPostal();
CasaJavi.agregarPropietario(1,2,"Javier Izquierdo");
CasaJavi.agregarPropietario(1,1,"Juan Rodriguez");
CasaJavi.imprimePlantas();

Does anyone know why I'm failing?

    
asked by izkierdo 17.01.2017 в 19:51
source

2 answers

1

Modify this part

plantas.push(
    [
      {"planta":planta,"puerta":puerta,"propietario":propietario}
    ])

to solve serious:

plantas.push(

      {"planta":planta,"puerta":puerta,"propietario":propietario}
    )

plantas = [];
function edificio(calle,numero,cp)
{
  //Propiedades
  this.calle = calle;
  this.numero = numero;
  this.cp = cp;

  //Metodos
  this.modificarNumero = modificarNumero;
  this.modificarCalle = modificarCalle;
  this.modificarCodigoPostal = modificarCodigoPostal;
  this.imprimeCalle = imprimeCalle;
  this.imprimeNumero = imprimeNumero;
  this.imprimeCodigoPostal = imprimeCodigoPostal;
  this.agregarPropietario = agregarPropietario;
  this.imprimePlantas = imprimePlantas;
}

this.agregarPlantasYPuerta = function (plantas,puertas)
{

}

this.modificarNumero = function (numero)
{
  this.numero = numero;
}

this.modificarCalle = function (calle)
{
  this.calle = calle;
}

this.modificarCodigoPostal = function (cp)
{
  this.cp = cp;
}

this.imprimeCalle  = function ()
{
  document.write("<br>Este edificio esta en la calle " + this.calle);
}

this.imprimeNumero  = function ()
{
  document.write("<br>Este edificio es el nº " + this.numero);
}

this.imprimeCodigoPostal  = function ()
{
  document.write("<br>Este edificio esta dentro del codigo postal: " + this.cp);
}

this.agregarPropietario = function (planta,puerta,propietario)
{
  plantas.push(
    
      {"planta":planta,"puerta":puerta,"propietario":propietario}
    )
}

this.imprimePlantas  = function ()
{
  for(var i=0; i<plantas.length; i++)
  {
    document.write("<br>Estamos en la planta: " + plantas[i].planta + " puerta " +plantas[i].puerta + " y el propietario es " + plantas[i].propietario);
  }
}


var CasaJavi = new edificio("Calle navarra",29,50650);
var CasaAna = new edificio("Calle aaaaaa",2329,'5065dds0');
document.write("Vivo en la " + CasaJavi.calle + " nº " + CasaJavi.numero + " y el codigo postal es " + CasaJavi.cp);
CasaJavi.modificarNumero('50');
document.write("<br>Vivo en la " + CasaJavi.calle + " nº " + CasaJavi.numero + " y el codigo postal es " + CasaJavi.cp);
CasaJavi.modificarCalle('Falsa');
document.write("<br>Vivo en la " + CasaJavi.calle + " nº " + CasaJavi.numero + " y el codigo postal es " + CasaJavi.cp);
CasaJavi.modificarCodigoPostal('50730');
document.write("<br>Vivo en la " + CasaJavi.calle + " nº " + CasaJavi.numero + " y el codigo postal es " + CasaJavi.cp);
CasaAna.imprimeCalle();
CasaAna.imprimeNumero();
CasaAna.imprimeCodigoPostal();
CasaJavi.agregarPropietario(1,2,"Javier Izquierdo");
CasaJavi.agregarPropietario(1,1,"Juan Rodriguez");
CasaJavi.imprimePlantas();
    
answered by 17.01.2017 / 20:09
source
3
  

Does anyone know why I'm failing?

In the function agregarPropietario , you are adding to the array plantas ,% array ( [] ) with 1 object ( {} ), that is, to be able to access the properties of the object , you still have to reach the first value of array .

Example: plantas[i][0].planta

Solutions:

  • Modify that plantas is added to the agregarPropietario method:

    plantas.push({"planta":planta,"puerta":puerta,"propietario":propietario});
    
  • Modify how the array plantas is read in the imprimePlantas method:

    var planta = plantas[i][0];
    document.write("<br>Estamos en la planta: " + planta.planta + " puerta " +planta.puerta + " y el propietario es " + planta.propietario);
    

PD : Your code has great "inconsistencies" I recommend you read this article: Introduction to object-oriented JavaScript

    
answered by 17.01.2017 в 20:04