2016-08-03 21 views
2

Ich baue eine Immobilienmarkt-Simulation, die ein Agent Based Model ausführt, und ich möchte einzelne Transaktionen verfolgen, so dass ich Diagramme und Statistiken mit den Daten erstellen kann. Ich dachte, es zu tun, indem eine Art von Objekt verwendet, das ich Transaction nennen:Multidimensionales Array vs. Array von Objekten

var Transaction = function(house, askingPrice, soldPrice, daysOnMarket) { 
    this.date = gameDate 
    this.house = house 
    this.askingPrice = askingPrice 
    this.soldPrice = soldPrice 
    this.daysOnMarket = daysOnMarket 
}; 

Jedes Mal, es wäre eine Transaktion sie die Schaffung einer neuen Transaction Objektinstanz auslösen würde und transArray geschoben werden:

transArray.push (new Transaction(house, askingPrice, soldPrice, daysOnMarket)); 

Ist dies der beste Weg, um diese Daten für meine genannten Zwecke zu sammeln und zu speichern oder wäre es besser, eine 2-dimensionale Matrix zu verwenden, wo y die date wäre und x würde die house, askingPrice, soldPrice, daysOnMarket sein? Was sehen Sie als Vor- und Nachteile für jede Methode?

+0

Es liegt an Ihnen. Ich würde persönlich eine Reihe von Objekten verwenden, aber es ist nicht unbedingt falsch, ein 2D-Array zu verwenden. –

+0

@SpencerWieczorek Was sehen Sie als Vor- und Nachteile für jede Methode? – neoflash

+0

Welches ist für Sie als Entwickler bequemer? –

Antwort

2

Sie könnten ein Array von Objekten verwenden, damit ich sie mit vertrauten Verbfunktionen manipulieren kann; wie ein Nachschlag. Es gibt wahrscheinlich mehr "reine" Javascript-Methoden, um etwas davon zu tun, aber ich habe auch die lookup für Geschwindigkeit getestet und es ist in dieser Form anständig.

Dies wird von einer anderen Antwort mit einem komplexeren Beispiel hier kopiert: Binding an array of objects to their specific form fields for updating/deleting

Hinweis auf, dass man zum Beispiel die hasDuplicates Funktion - so könnte man das auf das Objekt Array leicht dann unterstützen - und wenn Sie mehr als ein Objekt-Array können Sie die Funktionen auf jedem einzelnen wiederverwenden.

var myApp = myApp || {}; 
myApp.arrayObj = { 
    indexOf: function(myArray, searchTerm, property) { 
    for (var i = 0; i < myArray.length; i++) { 
     if (myArray[i][property] === searchTerm) return i; 
    } 
    return -1; 
    }, 
    indexAllOf: function(myArray, searchTerm, property) { 
    var ai = []; 
    for (var i = 0; i < myArray.length; i++) { 
     if (myArray[i][property] === searchTerm) ai.push(i); 
    } 
    return ai; 
    }, 
    lookup: function(myArray, searchTerm, property, firstOnly) { 
    var found = []; 
    var i = myArray.length; 
    while (i--) { 
     if (myArray[i][property] === searchTerm) { 
     found.push(myArray[i]); 
     if (firstOnly) break; //if only the first 
     } 
    } 
    return found; 
    }, 
    lookupAll: function(myArray, searchTerm, property) { 
    return this.lookup(myArray, searchTerm, property, false); 
    }, 
    remove: function(myArray, searchTerm, property, firstOnly) { 
    for (var i = myArray.length - 1; i >= 0; i--) { 
     if (myArray[i][property] === searchTerm) { 
     myArray.splice(i, 1); 
     if (firstOnly) break; //if only the first term has to be removed 
     } 
    } 
    }, 
    removeByIndex: function(myArray, index) { 
    myArray.splice(index, 1); 
    } 
};