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
,这将失败-在这种情况下,我也不会使用全局变量。