2016-07-31 24 views
2

Kontext: Ich baue ein Agent Based Model Immobilienmarkt sim. Ich Haushaltsgegenstände haben, die Eigenschaften und Methoden haben und bisher habe ich sie wie folgt erstellt:Neue Objektinstanzen, Generator, Array, Namensgeneration

var houseHoldArray = []; 

var Household = function(name, house) { 
    this.name = name; 
    this.house = house.address; 
    this.x = house.x; 
    this.y = house.y; 
    this.isHomeOwner = true; 
    this.isSelling = false; 

}; 

Household.prototype.draw = function() { 
ellipse(this.x, this.y, 10, 10); 
}; 

Household.prototype.determinMove = function() { 
    if(random(0, 100) <= 75){ 
     this.isSelling = true; 
    } 
}; 

var household1 = new Household("Smith", house1); 
var household2 = new Household("Black", house2); 
var household3 = new Household("Johnson", house3); 
var household4 = new Household("Williams", house4); 
var household5 = new Household("Jones", house5); 

houseHoldArray.push(household1, household2, household3, household4, household5); 

household1.draw(); 
household2.draw(); 
household3.draw(); 
household4.draw(); 
household5.draw(); 

ich jetzt eine Funktion erstellen möchten, ausgelöst auf einen Button beim Anklicken, das würde automatisch eine bestimmte Anzahl von neuen erstellen Haushaltsinstanzen und speichern sie im Array, da ich sie später mit einer for-Schleife durchlaufen muss und bestimmte Aktionen ausführen muss, abhängig vom Status ihrer Eigenschaften isSelling und isHomeowner.

Frage: Wie erstelle ich eine Funktion, die auf dem Klick auf eine Schaltfläche, wird eine bestimmte Menge an neuen Houselhold Objektinstanzen und schieben Sie sie auf die houseHoldArray generieren?

Sie können einen effizienteren Weg finden, dies zu tun, aber am Ende möchte ich ein Array einzelnen Haushalt mit Informationen haben, die mir erlauben, etwas zu laufen:

for (var i = 0; i < houseHoldArray.length; i++) { 
    if houseHoldArray[i].isSelling { 
     //do something 
    } 
    houseHoldArray[i].determinMove() 
} 

Antwort

0

Anstelle der Verwendung von " houseHold1, houseHold2 ", benutzen wir sie schon als Array. Gleiches gilt für Häuser. Wie folgt aus:

var houseHoldArray = []; 
var houses = [new House(), new House(), new House(), new House(), new House()]; 
function addHouseHolds(number, names, houseIndexes){ 
    for(var i = 0; i < number; i++){ 
     household = new Household(names[i],houses[ houseIndexes[i] ]); 
     houseHoldArray.push(household); 
    } 
} 

in html:

<button onclick='addHouseHolds(5, ["Smith", "Black", "Johnson","Williams","Jones"], [0,1,2,3,4])'>Click me</button>