Javascript 多维数组与对象数组
我正在构建一个房地产市场模拟,运行一个基于代理的模型,我想跟踪单个交易,这样我就可以用数据创建图表和统计数据。我想通过使用一种类型的对象来实现它,我将调用Javascript 多维数组与对象数组,javascript,arrays,oop,object,multidimensional-array,Javascript,Arrays,Oop,Object,Multidimensional Array,我正在构建一个房地产市场模拟,运行一个基于代理的模型,我想跟踪单个交易,这样我就可以用数据创建图表和统计数据。我想通过使用一种类型的对象来实现它,我将调用事务: var Transaction = function(house, askingPrice, soldPrice, daysOnMarket) { this.date = gameDate this.house = house this.askingPrice = askingPrice this.sol
事务:
var Transaction = function(house, askingPrice, soldPrice, daysOnMarket) {
this.date = gameDate
this.house = house
this.askingPrice = askingPrice
this.soldPrice = soldPrice
this.daysOnMarket = daysOnMarket
};
每次有事务时,它都会触发新的事务
对象实例的创建,并被推送到transArray
:
transArray.push (new Transaction(house, askingPrice, soldPrice, daysOnMarket));
这是积累和存储这些数据的最佳方法吗?还是最好使用二维数组,其中y是日期
,x是房屋、askingPrice、soldPrice、daysOnMarket
?您认为每种方法的优缺点是什么?您可以使用一组对象,这样我就可以使用熟悉的动词函数来操纵它们;像查找一样。可能有更多的“纯”Javascript方法来实现这些功能,但我还测试了查找的速度,这种形式很不错
这是从另一个答案复制过来的,这里有一个更复杂的例子:
请注意,例如,具有重复的
函数-因此您可以轻松地在对象数组上支持它-如果您有多个对象数组,则可以在每个对象数组上重复使用这些函数
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);
}
};
var myApp=myApp | |{};
myApp.arrayObj={
indexOf:函数(myArray、searchTerm、属性){
对于(var i=0;i=0;i--){
if(myArray[i][property]==searchTerm){
myArray.剪接(i,1);
if(firstOnly)break;//如果只需删除第一个项
}
}
},
removeByIndex:函数(myArray,index){
myArray.splice(索引1);
}
};
由您决定。我个人会使用对象数组,但使用2d数组并不一定是错误的。@SpencerWieczorek您认为每种方法的优点和缺点是什么?以您作为开发人员更方便的方法为准。@SpencerWieczorek实际上,虽然实际用法是一样的,两种方法背后的实际实现各不相同。我认为OP可能想要调查内存使用、时间复杂度和各种其他问题的影响。事实上,如果没有定义gameDate
,这将失败-在这种情况下,我也不会使用全局变量。