我正在构建一个运行基于代理的模型的房地产市场模拟,我想跟踪单个交易,这样我就可以用数据创建图表和统计数据。我想通过使用一种类型的对象来实现这一点,我将称之为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));
这是为了我所说的目的积累和存储这些数据的最佳方式吗?还是最好使用二维数组,其中y是date
,x是house, askingPrice, soldPrice, daysOnMarket
?你认为每种方法的优点和缺点是什么?
您可以使用对象数组,这样我就可以使用熟悉的动词函数来操作它们;就像查找一样。可能有更多的"纯"Javascript方法来完成其中的一些操作,但我也测试了lookup
的速度,它在这种形式下是不错的
这是从另一个答案中复制的,这里有一个更复杂的例子:将对象数组绑定到它们的特定表单字段,以更新/删除
请注意,例如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);
}
};