2016-08-03 157 views
2

我正在建立一個運行基於代理的模型的房地產市場模擬,我想跟蹤個別事務,以便我可以創建圖形和圖表並統計數據。我是通過使用一種類型的對象,我會打電話給Transaction想這樣做的:多維數組與對象數組

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

每次會有一個交易,將觸發新Transaction對象實例的創建和被推向transArray

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

這是積累和儲存這些資料我的既定目的的最好方式還是會更好地使用2維數組,其中y將是date和X都將是house, askingPrice, soldPrice, daysOnMarket?你認爲每種方法的優點和缺點是什麼?

+0

這取決於你。我會親自使用一組對象,但使用2d數組不一定是錯誤的。 –

+0

@SpencerWieczorek你認爲每種方法的優點和缺點是什麼? – neoflash

+0

無論你作爲開發者更方便。 –

回答

2

您可以使用一個對象數組,因此我可以使用熟悉的動詞功能來操作它們;像查找。有可能更多的「純」JavaScript方法來做一些這一點,但我也測試了lookup的速度,它在這種形式是體面的。

這是從另一個答案抄用更復雜的例子在這裏:Binding an array of objects to their specific form fields for updating/deleting

注意在一個實例hasDuplicates功能 - 這樣你就可以很容易地再支持在你的對象數組 - 如果你有一個以上一個對象數組可以重用每個對象的函數。

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